一道线段树最基础的题 我的代码wrong answer 求助、
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 num[maxnum+5],re;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; if(l==r) xd[u].max=num[l]; else { int mid=(l+r)/2; creat(u+u,l,mid); creat(u+u+1,mid+1,r); xd[u].max=max(xd[u+u].max,xd[u+u+1].max); }}void work(int u,int l,int r){ int mid=(xd[u].l+xd[u].r)/2; if(xd[u].l==l&&xd[u].r==r) { re=max(re,xd[u].max); } else if(l>=mid+1) { work(u+u+1,l,r); } else if(r<=mid) { work(u+u,l,r); } else { work(u+u,l,mid); work(u+u+1,mid+1,r); }}int main(){ int n,q,js=1,a,b; while(scanf("%d",&n)!=EOF) { printf("Case %d:\n",js); js++; for(int i=1;i<=n;i++) scanf("%d",&num[i]); creat(1,1,n); for(int i=1;i<=4*n;i++) cout<<xd[i].max<<" "; cout<<endl; scanf("%d",&q); while(q--) { scanf("%d%d",&a,&b); re=-9999; work(1,a,b); printf("%d\n",re); } }}