记录编号 |
535992 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
数列操作C |
最终得分 |
100 |
用户昵称 |
Deacep |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
4.779 s |
提交时间 |
2019-07-06 16:35:37 |
内存使用 |
22.81 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,md;
struct cmt{
int l,r;
long long laz;
long long data;
}t[400005];
void Init(int rt,int ll,int rr){
t[rt].laz=0;
t[rt].data=0;
t[rt].l=ll;
t[rt].r=rr;
if(ll==rr)return;
int m=(ll+rr)>>1;
Init(rt*2,ll,m);
Init(rt*2+1,m+1,rr);
}
void cha(int rt,int L,int R,long long k){
t[rt].data+=(R-L+1)*k;
// cout<<rt<<' '<<t[rt].data<<endl;//记得删注释qwq
if(t[rt].l==L&&t[rt].r==R){
t[rt].laz+=k;//
return;
}
if(t[rt].l==t[rt].r)
return;
int m=(t[rt].l+t[rt].r)>>1;
if(m>=R)
cha(rt*2,L,R,k);
else//不加这个else有神秘结果调了一天 qwq
if(m<L)
cha(rt*2+1,L,R,k);
else{
cha(rt*2,L,m,k);
cha(rt*2+1,m+1,R,k);
}
}
//long long ask(int rt,int L,int R);
/*void che(int rt,int L,int R,int k){
t[rt].data+=ask(rt,L,R)*k;
if(L==t[rt].l&&R==t[rt].r){
t[rt].laz*=k;
t[rt].data*=k;
return;
}
if(t[rt].l==t[rt].r)return;
int m=(t[rt].l+t[rt].r)>>1;
if(R<=m)
che(rt*2,L,R,k);
if(L>m)
che(rt*2+1,L,R,k);
else{
che(rt*2,L,m,k);
che(rt*2+1,m+1,R,k);
}
}*/
void kill_lz(int rt){
int m=(t[rt].l+t[rt].r)>>1;
cha(rt*2,t[rt].l,m,t[rt].laz);
cha(rt*2+1,m+1,t[rt].r,t[rt].laz);
t[rt].laz=0;
}
long long ask(int rt,int L,int R){
if(t[rt].l==L&&t[rt].r==R)
return t[rt].data;
int m=(t[rt].l+t[rt].r)>>1;
if(t[rt].laz)
kill_lz(rt);
if(m>=R)
return ask(rt*2,L,R);
if(L>m)
return ask(rt*2+1,L,R);
return ask(rt*2,L,m)+ask(rt*2+1,m+1,R);
}
int main(){
freopen("shuliec.in","r",stdin);
freopen("shuliec.out","w",stdout);
int m;
cin>>n;//>>m>>md;
Init(1,1,n);
int q;
for(int i=1;i<=n;i++){
cin>>q;
cha(1,i,i,q);
}
int u,v;
string exc;
cin>>m;
while(m--){
cin>>exc>>u>>v;
/* if(exc==""){
int k;
cin>>k;
che(1,u,v,k);
}*/
if(exc=="ADD"){
long long k;
cin>>k;
cha(1,u,v,k);
}
if(exc=="SUM")
cout<<ask(1,u,v);//%md;
}
return 0;
}