# [BZOJ3212] Pku3468 A Simple Problem with Integers

### 传送门

http://www.lydsy.com/JudgeOnline/problem.php?id=3212

### 题解

const
maxn=200000;
type
data=array[0..maxn]of int64;
var
x,y,z,c,d:data;
i,j,k,l:longint;
n,m,t:longint;
a,b,val,ans:int64;
cha:char;
procedure update(var a:data;pos,val:int64);
begin
while pos<=n do
begin
a[pos]:=a[pos]+val;
inc(pos,pos and (-pos));
end;
end;

function query(var a:data;pos:int64):int64;
var sum:int64;
begin
sum:=0;
while pos>0 do
begin
sum:=sum+a[pos];
dec(pos,pos and (-pos));
end;
exit(sum);
end;

begin
for i:=1 to n do
begin
y[i]:=x[i]-x[i-1];
z[i]:=y[i]*i;
update(c,i,y[i]);
update(d,i,z[i]);
end;
for i:=1 to m do
begin
if cha='Q'
then
begin
ans:=((b+1)*query(c,b)-query(d,b))-((a)*query(c,a-1)-query(d,a-1));
writeln(ans);
end
else
begin
update(c,a,val); update(c,b+1,-val);
y[a]:=y[a]+val; y[b+1]:=y[b+1]-val;
update(d,a,y[a]*a-z[a]); update(d,b+1,y[b+1]*(b+1)-z[b+1]);
z[a]:=y[a]*a; z[b+1]:=y[b+1]*(b+1);
end;
end;
end.

const
maxn=100005;
type
aa=record
l,r:longint; val,tag:int64;
end;
var
w:array[0..8*maxn]of aa;
i,j,k:longint;
n,m:longint;
a,b,c:longint;
ch:char;
procedure build(a,l,r:longint);
var mid:longint;
begin
w[a].l:=l; w[a].r:=r; w[a].val:=0; w[a].tag:=0;
if l=r then begin read(w[a].val); exit; end;
mid:=(l+r)>>1;
build(a<<1,l,mid); build(a<<1+1,mid+1,r);
w[a].val:=w[a<<1].val+w[a<<1+1].val;
end;

procedure pushdown(a:longint);
begin
if w[a].l=w[a].r then begin w[a].tag:=0; exit; end;
inc(w[a<<1].val,w[a].tag*(w[a<<1].r-w[a<<1].l+1));
inc(w[a<<1+1].val,w[a].tag*(w[a<<1+1].r-w[a<<1+1].l+1));
inc(w[a<<1].tag,w[a].tag); inc(w[a<<1+1].tag,w[a].tag);
w[a].tag:=0;
end;

procedure update(a,l,r,c:longint);
var mid:longint;
begin
if w[a].tag<>0 then pushdown(a);
if (l=w[a].l)and(w[a].r=r) then begin inc(w[a].val,c*(w[a].r-w[a].l+1)); inc(w[a].tag,c); exit; end;
mid:=(w[a].l+w[a].r)>>1;
if r<=mid then update(a<<1,l,r,c) else
if l>mid then update(a<<1+1,l,r,c)
else begin update(a<<1,l,mid,c); update(a<<1+1,mid+1,r,c); end;
w[a].val:=w[a<<1].val+w[a<<1+1].val;
end;

function query(a,l,r:longint):int64;
var mid:longint;
begin
if w[a].tag<>0 then pushdown(a);
if (l=w[a].l)and(w[a].r=r) then exit(w[a].val);
mid:=(w[a].l+w[a].r)>>1;
if r<=mid then exit(query(a<<1,l,r)) else
if l>mid then exit(query(a<<1+1,l,r))
else exit(query(a<<1,l,mid)+query(a<<1+1,mid+1,r));
end;

begin
for i:=1 to m do
begin
case ch of
'Q':begin readln(a,b); writeln(query(1,a,b)); end;
'C':begin readln(a,b,c); update(1,a,b,c); end;
end;
end;
end.

• 本文已收录于以下专栏：

## [BZOJ3212]Pku3468 A Simple Problem with Integers

• Zvezda_
• 2015年07月30日 18:28
• 206

## 线段树模版—A Simple Problem with Integers

D - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:...
• llzhh
• 2016年04月29日 00:03
• 161

## bzoj3212 Pku3468 A Simple Problem with Integers

• wanherun
• 2017年09月12日 10:36
• 64

## BZOJ3212: Pku3468 A Simple Problem with Integers

• DYT_B
• 2018年02月08日 20:42
• 18

## A Simple Problem with Integers----线段树

C - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:...
• bless924295
• 2016年06月02日 18:55
• 425

## HDU 4267 A Simple Problem with Integers(树状数组)

A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 ...
• yeguxin
• 2015年08月26日 10:46
• 596

## POJ 3468 A Simple Problem with Integers Splay tree&Segment tree

• ACM_cxlove
• 2012年07月27日 14:38
• 3006

## poj 3468 A Simple Problem with Integers(splay tree模板题)

A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Subm...
• zuihoudebingwen
• 2012年10月03日 15:13
• 2325

## hdu4267--A Simple Problem with Integers（树状数组）

• u013015642
• 2015年08月26日 08:53
• 1263

## BZOJ3212 A Simple Problem with Integers

3212: Pku3468 A Simple Problem with IntegersTime Limit: 1 Sec Memory Limit: 128 MB Submit: 1277 S...
• DCrusher
• 2015年12月19日 14:49
• 347

举报原因： 您举报文章：[BZOJ3212] Pku3468 A Simple Problem with Integers 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)