P2357 守墓人
搞不懂为啥这样写有问题
不就是线段树的板子吗!!!
为啥会有问题啊QAQ!!!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 7;
ll a[N];
struct Tree{
int l, r;
ll sum, mark;
}tree[N * 4];
void push_up(int i){
tree[i].sum = tree[i * 2 + 1].sum + tree[i * 2].sum;
return;
}
void push_down(int i){
if(tree[i].mark == 0)return;
tree[i * 2].mark += tree[i].mark;
tree[i * 2 + 1].mark += tree[i].mark;
int mid = (tree[i].l + tree[i].r) >> 1;
tree[i * 2].sum += tree[i].mark * (mid - tree[i].l + 1);
tree[i * 2 + 1].sum += tree[i].mark * (tree[i].r - mid);
tree[i].mark = 0;
return;
}
void build_tree(int l, int r, int i){
tree[i].l = l, tree[i].r = r, tree[i].mark = 0;
if(l == r){
tree[i].sum = a[l];
return;
}
int mid = (l + r) >> 1;
build_tree(l, mid, i * 2);
build_tree(mid + 1, r, i * 2 + 1);
push_up(i);
return;
}
void modify_tree(int i, int x, int y, int k){
if(x <= tree[i].l && y >= tree[i].r){
tree[i].sum += k * (tree[i].r - tree[i].l + 1);
tree[i].mark += k;
return;
}
push_down(i);
if(tree[i * 2].r >= x) modify_tree(i * 2, x, y, k);
if(tree[i * 2 + 1].l <= y) modify_tree(i * 2 + 1, x, y, k);
push_up(i);
return;
}
ll query_tree(int i, int x, int y){
ll ans = 0;
if(x <= tree[i].l && y >= tree[i].r)
return tree[i].sum;
push_down(i);
if(x <= tree[i * 2].r) ans += query_tree(i * 2, x, y);
if(y >= tree[i * 2 + 1].l) ans += query_tree(i * 2 + 1, x, y);
return ans;
}
int main(){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1;i <= n;i ++) scanf("%lld", &a[i]);
build_tree(1, n, 1);
for(int i = 0;i < m;i ++){
int p;
scanf("%d", &p);
if(p == 1){
int l, r, k;
scanf("%d%d%d", &l, &r, &k);
modify_tree(1, l, r, k);
}
else if(p == 2){
int k;
scanf("%d", &k);
modify_tree(1, 1, 1, k);
}
else if(p == 3){
int k;
scanf("%d", &k);
modify_tree(1, 1, 1, -k);
}
else if(p == 4){
int l, r;
scanf("%d%d", &l, &r);
printf("%lld\n", query_tree(1, l, r));
}
else
printf("%lld\n", query_tree(1, 1, 1));
}
return 0;
}
我靠,卡了我这么久,终于懂了,我的query_tree操作中没有加上push_down操作,真该死啊!!!!
QAQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理