题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754
Runtime Error
(ACCESS_VIOLATION)
哪出错了- -
//hdu1754建树creat 修改modify 查找search #include<iostream> using namespace std; #define Max 400100 int MAX; typedef struct node { int l,r,max; node *left,*right; }Node,*Tree; int nt=1; node tree[600010]; inline int max(int a,int b) {return a>b?a:b;} Tree Creat(int l,int r) { Tree tmp=&tree[nt++]; tmp->max=0; tmp->l=l; tmp->r=r; if(l==r) tmp->left=tmp->right=NULL; else { int mid=(l+r)/2; tmp->left=Creat(l,mid); tmp->right=Creat(mid+1,r); } return tmp; } void Modify(Tree tmp,int l,int x) //l:位置 x:覆盖值 { if(tmp->l==tmp->r) { tmp->max=x; return; } int mid=(tmp->l+tmp->r)/2; if(l<=mid) Modify(tmp->left,l,x); else Modify(tmp->right,l,x); tmp->max=max(tmp->left->max,tmp->right->max); } void Search(Tree tmp,int l,int r) //在树tmp搜索线段l_r { if(tmp->l==l&&tmp->r==r) { if(MAX<tmp->max) MAX=tmp->max; return; } int mid=(tmp->l+tmp->r)/2; if(mid<l) Search(tmp->right,l,r); else if(r<=mid) Search(tmp->left,l,r); else { Search(tmp->left,l,mid); Search(tmp->right,mid+1,r); } } int main() { char t[2]; int N,M,A,B,i,j,x; while( scanf("%d%d",&N,&M)!=EOF ) { Tree T=Creat(1,N); for(i=1;i<=N;i++) { scanf("%d",&x); Modify(T,i,x); } for(i=1;i<=M;i++) { getchar(); scanf("%s%d%d",t,&A,&B); if(t[0]=='Q') // 询问 Search { MAX=0; Search(T,A,B); //A~B中的最大值 printf("%d\n",MAX); } else // 更新 Modify Modify(T,A,B); //把ID为A的学生的成绩更改为B } } return 0; }