样例过了,1号测试点下载下来了,错了一个数据 答案是: 32766 32744 32764 32766 32764 32766 32765 32766 32766 32766 32766 32766 32766 32764 32766 32766 32768 32764 32766 32745 32758 我的程序结果是: 32766 32744 32764 32766 32764 32766 32764 32766 32766 32766 32766 32766 32766 32764 32766 32766 32768 32764 32766 32745 32744 实在找不到问题所在了,求助
#include<bits/stdc++.h>
using namespace std;
struct lt
{
int a,l,r;
lt *lc,*rc;
};
int a[200001];
void fun(lt *h)
{
int t;
if(h->l==h->r)
{
h->a=a[h->l];
return ;
}
t=((h->l+h->r)/2);
h->lc=new lt;
h->lc->l=h->l;
h->lc->lc=0;
h->lc->r=t;
h->lc->rc=0;
fun(h->lc);
h->rc=new lt;
h->rc->lc=0;
h->rc->l=t+1;
h->rc->rc=0;
h->rc->r=h->r;
fun(h->rc);
h->a=0x80000000;
if(h->lc && h->lc->a>h->a)
h->a=h->lc->a;
if(h->rc && h->rc->a>h->a)
h->a=h->rc->a;
}
int Q(lt *h,int x,int y)
{
int ans=0,t;
if(h->l>=x && h->r<=y)
return h->a;
if(h->lc->l>=x && h->lc->r<=y && h->lc->a>ans)
ans=h->lc->a;
if(h->lc->l<=y && h->lc->r>=x)
{
t=Q(h->lc,x,y);
if(t>ans)
ans=t;
}
if(h->rc->l>=x && h->rc->r<=y && h->lc->a>ans)
ans=h->rc->a;
if(h->rc->l<=y && h->rc->r>=x)
{
t=Q(h->rc,x,y);
if(t>ans)
ans=t;
}
return ans;
}
void U(lt *h,int x,int y)
{
if(h->a<y)
h->a=y;
if(h->r>h->l)
{
if(h->lc->r>=x)
U(h->lc,x,y);
else
U(h->rc,x,y);
}
}
void f(lt *h)
{
cout<<h->l<<" "<<h->r<<" "<<h->a;
getchar();
if(h->lc)
f(h->lc);
if(h->rc)
f(h->rc);
}
int main()
{
//freopen("abc.txt","w",stdout);
int n,m,i,x,y;
char c;
lt *h;
cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i];
h=new lt;
h->a=0;
h->l=0;
h->r=n-1;
h->lc=0;
h->rc=0;
fun(h);
for(i=0;i<m;i++)
{
f(h);
cin>>c>>x>>y;
if(c=='Q')
cout<<Q(h,x-1,y-1)<<endl;
else
U(h,x-1,y);
}
return 0;
}