http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1189
代码:
#include <stdio.h> #define maxnum 100003 #include <iostream> using namespace std; int max(int a,int b) { return a>b?a:b; } struct code { int l,r,max; }xd[4*maxnum+5]; void creat(int u,int l,int r) { xd[u].l=l; xd[u].r=r; xd[u].max=0; int mid=(l+r)/2; if(l!=r) { creat(u+u,l,mid); creat(u+u+1,mid+1,r); } } void insert(int u,int i,int c) { int mid=(xd[u].l+xd[u].r)/2; if(xd[u].l==xd[u].r) { xd[u].max=c; return; } if(c>xd[u].max) xd[u].max=c; if(i<=mid) { insert(u+u,i,c); return; } if(i>mid) { insert(u+u+1,i,c); return; } } int work(int u,int l,int r) { if(xd[u].l==l&&xd[u].r==r) { return xd[u].max; } int mid=(xd[u].l+xd[u].r)/2; if(r<=mid) return work(u+u,l,r); if(l>mid) return work(u+u+1,l,r); return max(work(u+u,l,mid),work(u+u+1,mid+1,r)); } int main() { int n,q,js=1,a,b,num; while(scanf("%d",&n)!=EOF) { printf("Case %d:\n",js); js++; creat(1,1,n); for(int i=1;i<=n;i++) { scanf("%d",&num); insert(1,i,num); } scanf("%d",&q); while(q--) { scanf("%d%d",&a,&b); printf("%d\n",work(1,a,b)); } } }