社区讨论
线段树 70pts 玄关 求调!
P3374【模板】树状数组 1参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m38sytk7
- 此快照首次捕获于
- 2024/11/08 21:59 去年
- 此快照最后确认于
- 2025/11/04 15:06 4 个月前
rt.
TLE on #2 #9 #10
Code:
CPP#include <bits/stdc++.h>
//#include <iostream>
//#include <cstdio>
using namespace std;
#define open signed
#define cin(d) d=read()
#define cout(d) printf("%d",d)
// read & print (fast)
const int N=5e5+5;
int n,m,s[4*N],A[4*N];
inline int read(){
int x=0,f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
return x*f;}
namespace tree {
inline void build(int k,int l,int r) {
if(l==r) {
s[k]=A[r];
return;
} int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
s[k]=s[k<<1]+s[k<<1|1];
}
inline void modify(int k,int l,int r,int x,int y) {
if(l==r) {
if(l==x) s[k]+=y;
return;
} int mid=(l+r)>>1;
modify(k<<1,l,mid,x,y);
modify(k<<1|1,mid+1,r,x,y);
s[k]=s[k<<1]+s[k<<1|1];
}
int query(int k,int l,int r,int x,int y) {
if(r<x||y<l) return 0;
if(x<=l&&r<=y) return s[k];
int mid=(l+r)>>1,res=0;
res+=query(k<<1,l,mid,x,y);
res+=query(k<<1|1,mid+1,r,x,y);
return res;
}
}; using namespace tree;
open main()
{
cin(n); cin(m);
for(int i=1;i<=n;i++) cin(A[i]);
build(1,1,n);
for(int i=1;i<=m;i++) {
int x,y,op;
cin(op); cin(x); cin(y);
if(op==1) modify(1,1,n,x,y);
else if(op==2)
cout(query(1,1,n,x,y)),
printf("\n");
} return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...