#define BIN_SHIFT 11 #define BIN_N ((100000-1>>BIN_SHIFT)+1) #define S_LIM 7000 int sum[BIN_N][1d5+2]{}; int num[BIN_N][1d5+2]{}; int@n,@q,@c[n]; rep(i,n){ int j=i>>BIN_SHIFT; sum[j][c[i]+1]+=c[i]; num[j][c[i]+1]+=1; } rep(j,BIN_N){ rep(k,1d5+1){ sum[j][k+1]+=sum[j][k]; num[j][k+1]+=num[j][k]; } } struct{int o,n;}s[BIN_N][S_LIM]; int sn[BIN_N]{},st=0; rep(q){ int@t; if(t==1){ int@x--,@y; int j=x>>BIN_SHIFT; s[j][sn[j]++]={c[x],y}; c[x]=y; if(++st==S_LIM){ st=0; rep(j,BIN_N){ int b[1d5+1]{}; rep(i,sn[j]){ b[s[j][i].o]-=1; b[s[j][i].n]+=1; } int zs=0; int zn=0; rep(k,1d5+1){ sum[j][k+1]+=zs+=b[k]*k; num[j][k+1]+=zn+=b[k]; } sn[j]=0; } } }else{ int@(l--,r,a,b); ll z=0; if(l>>BIN_SHIFT==r>>BIN_SHIFT){ while(l>BIN_SHIFT,r>>BIN_SHIFT){ z+=sum[j][b]-sum[j][a]+a*num[j][a]+b*(num[j][1d5+1]-num[j][b]); rep(i,sn[j]){ z-=max(a,min(b,s[j][i].o)); z+=max(a,min(b,s[j][i].n)); } } } wt(z); } }