标签:
Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 1701 Accepted Submission(s): 615
#include <cstdio> #include <algorithm> using namespace std; const int MAXN=100005; struct Node{ int mn,l,r; }a[MAXN*3]; int n,m; int val[MAXN]; void build(int rt,int l,int r) { a[rt].l=l; a[rt].r=r; if(l==r) { scanf("%d",&a[rt].mn); val[l]=a[rt].mn; return ; } int mid=(l+r)>>1; build(rt<<1,l,mid); build((rt<<1)|1,mid+1,r); a[rt].mn=min(a[rt<<1].mn,a[(rt<<1)|1].mn); } void query(int rt,int l,int r,int &val) { if(val==0) return ; if(a[rt].mn>val) return ; if(a[rt].l==a[rt].r) { val%=a[rt].mn; return ; } int mid=(a[rt].l+a[rt].r)>>1; if(r<=mid) { query(rt<<1,l,r,val); } else if(mid<l) { query((rt<<1)|1,l,r,val); } else { query(rt<<1,l,mid,val); query((rt<<1)|1,mid+1,r,val); } } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); build(1,1,n); scanf("%d",&m); while(m--) { int l,r; scanf("%d%d",&l,&r); if(l==r) { printf("%d\n",val[l]); } else { int res=val[l]; query(1,l+1,r,res); printf("%d\n",res); } } } return 0; }
标签:
原文地址:http://www.cnblogs.com/program-ccc/p/5874580.html