线段树求为何超时

P1531 I Hate It

为什么要while,只有一组数据啊
by K_layna @ 2023-08-04 16:35:40


@[xiaoxiaoxia](/user/677127) `updata` 函数出锅了,`else` 应该是 `if(y>mid)`
by TimeLimitEnough @ 2023-08-04 16:45:23


@[K_layna](/user/298878) 原题是多组数据。我只是来询问一下洛谷谷民
by xiaoxiaoxia @ 2023-08-04 16:45:30


@[xiaoxiaoxia](/user/677127) 多测没事,`scanf` 是有返回值的
by TimeLimitEnough @ 2023-08-04 16:46:30


@[dyyzy](/user/1052984) 这应该不影响吧,如果改了还是超时。
by xiaoxiaoxia @ 2023-08-04 16:47:10


@[xiaoxiaoxia](/user/677127) 能放一下原题吗
by TimeLimitEnough @ 2023-08-04 16:48:09


ok
by xiaoxiaoxia @ 2023-08-04 16:49:12


https://vjudge.net/contest/573342#problem/A
by xiaoxiaoxia @ 2023-08-04 16:49:25


query要改 ``` int query(int l, int r, int id) { if(l<=a[id].l&&r>=a[id].r) { return a[id].m; } int mid=(a[id].l+a[id].r)/2; int ans=0; if(l<=mid) { ans=max(ans,query(l,r,id<<1)) ; } if(r>mid) { ans=max(ans,query(l,r,id<<1|1)) ; } return ans; } ``` updata里l==r那部分要改,只有修改值大于当前值才要改 ``` void updata(int x, int y, int id) { int l=a[id].l; int r=a[id].r; int mid=(l+r)/2; if(l==r) { a[id].m=max(a[id].m,y); return ; } if(x<=mid) updata(x,y,id<<1); else updata(x,y,id<<1|1); a[id].m=max(a[id<<1].m,a[id<<1|1].m); } ``` 已AC
by K_layna @ 2023-08-04 16:51:36


@[xiaoxiaoxia](/user/677127)
by K_layna @ 2023-08-04 16:54:03


| 下一页