#include #include #include #include #pragma comment(linker, "/STACK:102400000,102400000") using namespace std; #define ls l,mid,x<<1 #define rs mid+1,r,x<<1|1 const int Maxn=100020,M=1e9+7; int pre[Maxn],rev[Maxn],fin[Maxn]; int dfs_t; int a[Maxn]; int rep[Maxn],sz[Maxn]; int rev2,rev10; vectorG[Maxn]; vectorV; struct Node{ int sum; Node *ch[2]; }pool[Maxn*30],*nd[Maxn]; int cur; Node* getnew(){ Node *ret=&pool[cur++]; return ret; } void dfs(int u,int p){ pre[u]=++dfs_t; rev[dfs_t]=u; sz[u]=1; for(int i=0;isum=0; if(l==r)return ret; int mid=(l+r)>>1; ret->ch[0]=build(ls); ret->ch[1]=build(rs); return ret; } int query(int id,int K){ Node* rit=nd[fin[id]]; Node* lit=nd[pre[id]-1]; int l=1,r=(int)V.size(); while(l!=r){ int mid=(l+r)>>1; int tmp=rit->ch[0]->sum-lit->ch[0]->sum; if(tmpch[1],lit=lit->ch[1]; l=mid+1; } else{ rit=rit->ch[0],lit=lit->ch[0]; r=mid; } } return V[l-1]; } Node *add(Node *o,int tar,int l,int r,int x){ Node *ret=getnew(); ret->sum=o->sum+1; if(l==r)return ret; int mid=(l+r)>>1; if(tar<=mid)ret->ch[0]=add(o->ch[0],tar,ls),ret->ch[1]=o->ch[1]; else ret->ch[1]=add(o->ch[1],tar,rs),ret->ch[0]=o->ch[0]; return ret; } void scanf(int &x){ char c; while((c=getchar())<'0'||c>'9'); x=c-'0'; while((c=getchar())>='0'&&c<='9')x=x*10+c-'0'; } int get(int x){ return lower_bound(V.begin(),V.end(),x)-V.begin()+1; } int main(){ int tmp[11]; tmp[0]=tmp[1]=1; for(int i=2;i<=10;i++)tmp[i]=1LL*(M-M/i)*tmp[M%i]%M; rev2=tmp[2],rev10=tmp[10]; //printf("rev2=%lld\n",10LL*rev10%M); int _;scanf("%d",&_); while(_--){ int n,m; cur=0; scanf(n);scanf(m); for(int i=1;i<=n;i++)G[i].clear(); V.clear(); for(int i=1;i<=n;i++)scanf(a[i]),V.push_back(a[i]); for(int i=1;i=M)ans-=M; } printf("%d.0\n",ans); } }