为什么这个代码HDU可以过,在洛谷一片TLE和MLE?

P1531 I Hate It

注意看题,洛谷的题有点不一样:如果当前学生成绩比x低,就把他的成绩改为x
by litble @ 2017-06-09 07:14:40


```cpp @[luobobo](/space/show?uid=20604) 好像改了也不行啊 #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn=250005 int imax[maxn<<2]; int ans1,ans2; void create_tree(int rt,int m,int n){ if(m==n){ scanf("%d",&imax[rt]); } else { create_tree(rt*2,m,(m+n)/2); create_tree(rt*2+1,(m+n)/2+1,n); imax[rt]=max(imax[2*rt],imax[2*rt+1]); } } void update(int rt,int m,int n,int pos,int num){ if(m==n && n==pos ){ if(imax[rt]<num) imax[rt]=num; } else{ if(pos<=(m+n)/2) update(rt*2,m,(m+n)/2,pos,num); if(pos>(m+n)/2) update(rt*2+1,(m+n)/2+1,n,pos,num); imax[rt]=max(imax[rt<<1],imax[rt<<1|1]); } } int require(int rt,int m,int n,int M,int N){ if(M<=m && n<=N) return imax[rt]; else{ int tmp=-1; if(M<=(m+n)/2) tmp=max(tmp,require(rt*2,m,(m+n)/2,M,N)); if(N>(m+n)/2) tmp=max(tmp,require(rt*2+1,(m+n)/2+1,n,M,N)); return tmp; } } int main( ){ int n,m,j,k,i,p,q,L,R; char op; while(scanf("%d%d",&n,&m)!=EOF){ create_tree(1,1,n); getchar(); while(m--){ scanf("%c%d%d%*c",&op,&L,&R); if(op=='Q') printf("%d\n",require(1,1,n,L,R)); else update(1,1,n,L,R); } } return 0; } ```
by ABCDXYZ @ 2017-06-22 20:36:31


%%%
by yybyyb @ 2017-07-21 22:24:07


然而现在我也是这样。。。。
by yybyyb @ 2017-07-21 22:26:36


@[yybyyb](/space/show?uid=21283) 现在呢
by 龙神哈迪斯 @ 2017-08-16 20:38:35


@[龙神哈迪斯](/space/show?uid=47901) 过了。。。。。z=
by yybyyb @ 2017-08-16 22:22:16


|