线段树 70pts 玄关 求调!
查看原帖
线段树 70pts 玄关 求调!
1364972
KXY_Moon楼主2024/11/8 21:57

rt.

TLE on #2 #9 #10

Code:

#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;
}
2024/11/8 21:57
加载中...