原题。
中文题面。
结果:WA*1。
代码:
#include <bits/stdc++.h>
#ifndef ONLINE_JUDGE
#define debug(...) fprintf(stderr,__VA_ARGS__)
#else
#define debug(...)
#endif
using namespace std;
using namespace chrono;
typedef signed char i8;typedef short i16;typedef int i32;typedef long long i64;typedef unsigned char u8;typedef unsigned short u16;typedef unsigned u32;typedef unsigned long long u64;typedef float f32;typedef double f64;typedef long double f96;
template<typename A,typename B>void to_max(A& a,B b){if(a<b)a=b;}
template<typename A,typename B>void to_min(A& a,B b){if(b<a)a=b;}
#define __use_fast_io
namespace fast_io{
#ifndef __cplusplus
#define __cplusplus 201402L
#endif
const unsigned is(1<<21),os(1<<14);bool ne;char i[is],o[os],*ib(i),*ie(i),*ob(o),*oe(o+os),a[20],&c(*a),*b;void f(){ob-=fwrite(o,1,ob-o,stdout);}void p(char c){if(ob==oe)f();*ob++=c;}template<typename T>void _write(T&r){if(r==0)return p('0');if(r<0)p('-'),r=~(r-1);for(b=a;r;r/=10)*++b=(r%10)^'0';while(b!=a)p(*b--);}
#define g (ib==ie&&(ie=(ib=i)+fread(i,1,is,stdin),ib==ie)?-1:*ib++)
void reads(char*s){for(c=g;~c&&isspace(c);c=g);for(*s++=c,c=g;~c&&!isspace(c);c=g)*s++=c;*s=0;}template<typename T>void read(T&r){ne=false;for(c=g;~c&&(c<'0'||c>'9');c=g)ne=(c=='-');for(r=c^'0',c=g;isdigit(c);c=g)r=(r<<3)+(r<<1)+(c^'0');if(ne)r=~(r-1);}template<>void read<char>(char&r){for(c=g;~c&&isspace(c);c=g);r=c;}template<>void read<string>(string&r){r.clear();for(c=g;~c&&isspace(c);c=g);for(r.push_back(c),c=g;~c&&!isspace(c);c=g)r.push_back(c);}
#undef g
#if(__cplusplus>=201703L)
template<typename...Args>void read(Args&...args){(read(args),...);}template<typename...Args>void _write(Args&...args){(_write(args),...);}
#else
template<typename T,typename...args>void read(T&a,args&...b){read(a);read(b...);}template<typename T,typename...args>void _write(T&a,args&...b){_write(a);_write(b...);}
#endif
template<>void _write<char>(char&r){p(r);}template<>void _write<char*>(char*&r){for(;*r;p(*r++));}template<>void _write<const char*>(const char*&r){for(;*r;p(*r++));}template<>void _write<string>(string&r){const char*s(r.data());_write(s);}template<typename...args>void write(args...a){_write(a...);}struct _des{~_des(){f();}}d;}using fast_io::read;using fast_io::reads;using fast_io::write;
constexpr int N(1e5+5),SQ(320);
int n,m,sq,a[N],fun_l[N],fun_r[N],pos[N],block_l[SQ],block_r[SQ],cover[SQ][N];
i64 fun_sum[SQ],block_sum[SQ],subblock_sum[SQ][SQ];
i64 pre_sum(int x){
if(!x){return 0;}
return block_sum[pos[x]-1]+subblock_sum[pos[x]][x-block_l[pos[x]]+1];
}
i64 seq_sum(int l,int r){
return pre_sum(r)-pre_sum(l-1);
}
int main(){
int i,j,opt,x,y;
i64 ans;
read(n);
sq=sqrt(n);
for(i=1;i<=n;++i){
read(a[i]);
pos[i]=(i<=sq?1:pos[i-sq]+1);
if(pos[i]!=pos[i-1]){
block_l[pos[i]]=i;
}
block_r[pos[i]]=i;
block_sum[pos[i]]+=a[i];
subblock_sum[pos[i]][i-block_l[pos[i]]+1]=
subblock_sum[pos[i]][i-block_l[pos[i]]]+a[i];
}
for(i=1;i<=n;++i){
read(fun_l[i],fun_r[i]);
}
for(i=1;i<=pos[n];++i){
block_sum[i]+=block_sum[i-1];
for(j=block_l[i];j<=block_r[i];++j){
++cover[i][fun_l[j]];
--cover[i][fun_r[j]+1];
}
for(j=1;j<=n;++j){
cover[i][j]+=cover[i][j-1];
fun_sum[i]+=cover[i][j]*(i64)(a[j]);
}
}
read(m);
for(i=1;i<=m;++i){
read(opt,x,y);
if(opt==1){
for(j=1;j<=pos[n];++j){
fun_sum[j]+=cover[j][x]*(i64)(y-a[x]);
}
for(j=x;j<=block_r[pos[x]];++j){
subblock_sum[pos[x]][j-block_l[pos[x]]+1]+=y-a[x];
}
for(j=pos[x];j<=pos[n];++j){
block_sum[j]+=y-a[x];
}
a[x]=y;
}else{
ans=0;
if(pos[x]==pos[y]){
for(;x<=y;ans+=seq_sum(fun_l[x],fun_r[x]),++x);
}else{
for(;pos[x]==pos[x-1];++x){
ans+=seq_sum(fun_l[x],fun_r[x]);
}
for(;pos[y]==pos[y+1];--y){
ans+=seq_sum(fun_l[y],fun_r[y]);
}
for(x=pos[x],y=pos[y];x<=y;++x){
ans+=fun_sum[x];
}
}
write(ans,'\n');
}
}
return 0;
}