60pts,最后一个点超时,七八九测试点WA
by lwxxs @ 2024-04-05 13:24:45
@[lwxxs](/user/995853) 你这线段树是不是写复杂了
模版,~~我不知道要不要改~~
```
void pushup(int k){
sum[k] = sum[k << 1] + sum[k << 1 | 1];
return ;
}
void build(int k,int l,int r){
if(l == r){
sum[k] = a[l];
return ;
}
int mid = (l + r) >> 1;
build(k << 1,l,mid);
build(k << 1 | 1,mid + 1,r);
pushup(k);
return ;
}
void change(int k,int l,int r,int v){
sum[k] += (ll)v * (r - l + 1);
add[k] += v;
return ;
}
void pushdown(int k,int l,int r){
if(add[k]){
int mid = (l + r) >> 1;
change(k << 1,l,mid,add[k]);
change(k << 1 | 1,mid + 1,r,add[k]);
add[k] = 0;
}
return ;
}
void update(int k,int l,int r,int x,int y,int v){
if(l >= x && r <= y){
change(k,l,r,v);
return ;
}
pushdown(k,l,r);
int mid = (l + r) >> 1;
if(x <= mid) update(k << 1,l,mid,x,y,v);
if(y >= mid + 1) update(k << 1 | 1,mid + 1,r,x,y,v);
pushup(k);
return ;
}
ll query(int k,int l,int r,int x,int y){
if(l >= x && r <= y) return sum[k];
pushdown(k,l,r);
int mid = (l + r) >> 1;
ll res = 0;
if(x <= mid) res = query(k << 1,l,mid,x,y);
if(y >= mid + 1) res += query(k << 1 | 1,mid + 1,r,x,y);
return res;
}
```
by wrh316 @ 2024-04-05 14:17:20
@[lwxxs](/user/995853) 两个错误:
1. pushdown函数里面有一个`=`打成了`+=`。
```cpp
if(tr[u<<1|1].reset!=inf){
tr[u<<1|1].reset+=tr[u].add;
tr[u<<1|1].maxv+=tr[u<<1|1].reset;//here
}
```
2. reset 也要用 long long
```cpp
ll add;
int reset;//here
ll maxv;
```
by Leo_SZ @ 2024-04-05 21:47:16
对于超时,题目已经提示:请注意大量数据读入对程序效率造成的影响。所以请将 cin 换成 scanf 或快读。
by Leo_SZ @ 2024-04-05 22:53:55
@[Leo_SZ](/user/258520) 感谢大佬,已关
by lwxxs @ 2024-04-06 18:51:20
此贴完结
by lwxxs @ 2024-04-06 18:51:58