社区讨论
依旧玄关求调
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 条回复,欢迎继续交流。
正在加载回复...