社区讨论

依旧玄关求调

P1438无聊的数列参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mlhvcc3h
此快照首次捕获于
2026/02/11 18:10
上周
此快照最后确认于
2026/02/11 18:40
上周
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int a[N];
struct LStree{
	int l,r;
	int val;
	int s;
	int z;
	int c;
};
struct LStree_{
	LStree h[N<<2];
	
	void push_down(int u){
		if(h[u].s){
			h[u<<1].z+=h[u].z;
			h[u<<1].c+=h[u].c;
			h[u<<1].s=1;
			h[u<<1|1].z+=h[u].z+(h[u<<1|1].l-h[u<<1].l)*h[u].c;
			h[u<<1|1].c+=h[u].c;
			h[u<<1|1].s=1;
		}
		h[u].s=h[u].z=h[u].c=0;
	}
	void build(int u,int l,int r){
		if(l==r){
			h[u]={l,r,a[l],0,0,0};
			return ;
		}
		h[u]={l,r,0,0,0,0};
		int mid=(l+r)>>1;
		build(u<<1,l,mid);
		build(u<<1|1,mid+1,r); 
	}
	void change(int u,int ql,int qr,int k,int c){
		int l=h[u<<1|1].l,r=h[u<<1|1].r;
		if(ql<=l&&r<=qr){
			h[u<<1|1].s=1;
			h[u<<1|1].z+=k+(l-ql)*c;
			h[u<<1|1].c+=c;
			return ;
		}
		push_down(u<<1|1);
		int mid=(l+r)>>1;
		if(ql <= mid) change(u<<1,ql,qr,k,c);
		if(qr > mid)change(u<<1|1,ql,qr,k,c);
	}
	int query(int u,int p){
		int l=h[u].l,r=h[u].r;
		if(l==r){
			h[u].val+=h[u].z;
			h[u].z=0;h[u].c=0;
			return h[u].val;
		}
		push_down(u);
		int mid=(l+r)>>1;
		if(p<=mid) return query(u<<1,p);
		else return query(u<<1|1,p); 
	} 
}tree;
signed main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	tree.build(1,1,n);
	for(int i=1;i<=m;i++){
		int op;
		cin>>op;
		if(op==1){
			int l,r,k,d;
			cin>>l>>r>>k>>d;
			tree.change(1,l,r,k,d);
		}
		else{
			int p;
			cin>>p;
			cout<<tree.query(1,p)<<"\n";
		}
	}
	return 0;
}
莫名奇妙 RE 9pts 样例全过

回复

2 条回复,欢迎继续交流。

正在加载回复...