/*successful water over, hahaha, probably data water bar*/#include<stdio.h>#include<algorithm>#include<string.h>#include<queue>#include<Set>#defineT_mid (l+r >> 1)#defineLS (o<<1)#defineRS (o<<1 | 1)#defineLson Ls,l,t_mid#defineRson Rs,t_mid+1,rusing namespaceStd;typedefLong Longll;Const intN =100000+5;inta[n],c[n<<2],n;voidBuildintOintLintR) { if(L==R) {C[o] = a[l];return;} Build (Lson); Build (Rson); C[o]=min (C[ls],c[rs]);}intQueryintQlintQrintOintLintRintx) { if(l==r) {if(C[o] <= x)returnL//found a little smaller than him. Else return-1; } intAns =-1; if(T_mid >= QL && C[ls] <=x) {ans=query (QL,QR,LSON,X); if(ans = =-1) { if(T_mid < QR && C[rs] <= x) ans =query (QL,QR,RSON,X); } returnans; } Else if(T_mid < QR && C[rs] <= x)returnquery (QL,QR,RSON,X); return-1;}intMain () {//freopen ("C:\\users\\acer\\desktop\\in.txt", "R", stdin); intT;SCANF ("%d",&T); while(t--) {scanf ("%d",&N); for(intI=1; i<=n;i++) scanf ("%d", A +i); Build (1,1, N); intQ; scanf ("%d",&q); while(q--) { intop; scanf ("%d",&op); intnow =op; intL=1; while(L <=N) {L=query (L,n,1,1, N,now); if(L = =-1) Break; now%=A[l]; } printf ("%d\n", now); } }}
Harbin University of Science and Technology sixth session program design team E-mod