社区讨论

线段树 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 条回复,欢迎继续交流。

正在加载回复...