| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
RE+WA好几天了,求大神伸出援手program aa;
var
a,mins,data,add_x:array[-1..400010] of int64;
rev:array[-1..400010] of boolean;
next,left,right,size:array[-1..400010] of longint;
n,m,i,head,maxc,root,st,wt,y,st2,root_n,temp,t:longint;
add_data:int64;
ch,ch2:char;
function min(a,b:int64):int64;
begin
if a<b then min:=a
else min:=b;
end;
procedure modify(x:longint);
begin
if x=0 then exit;
mins[x]:=min(data[x],min(mins[left[x]],mins[right[x]]));
size[x]:=size[left[x]]+size[right[x]]+1;
end;
function left_rotate(root:longint):longint;
var
y:longint;
begin
y:=right[root];
right[root]:=left[y];
modify(root);
left[y]:=root;
modify(y);
exit(y);
end;
function right_rotate(root:longint):longint;
var
y:longint;
begin
y:=left[root];
left[root]:=right[y];
modify(root);
right[y]:=root;
modify(y);
exit(y);
end;
procedure pushdown(root:longint;k:int64);
var
y:longint;
begin
if root=0 then exit;
if k>0 then
begin
add_x[root]:=add_x[root]+k;
data[root]:=data[root]+k;
mins[root]:=mins[root]+k;
end;
end;
procedure deal(root:longint;bo:boolean);
var
t:longint;
begin
if root=0 then exit;
if bo then
begin
t:=left[root];
left[root]:=right[root];
right[root]:=t;
rev[root]:=not rev[root];
end;
end;
function splay(root,k:longint):longint;
var
x:longint;
begin
deal(left[root],rev[root]);
deal(right[root],rev[root]);
pushdown(left[root],add_x[root]);
pushdown(right[root],add_x[root]);
add_x[root]:=0;
rev[root]:=false;
x:=size[left[root]]+1;
if x=k then splay:=root
else if x<k then
begin
right[root]:=splay(right[root],k-x);
exit(left_rotate(root));
end
else
begin
left[root]:=splay(left[root],k);
exit(right_rotate(root));
end;
end;
procedure build;
begin
data[-1]:=maxlongint;
data[1]:=a[1];
mins[1]:=a[1];
size[1]:=1;
right[-1]:=1;
for i:=2 to n do
begin
data[i]:=a[i];
mins[i]:=a[i];
size[i]:=1;
right[i-1]:=i;
end;
data[n+1]:=maxlongint;
mins[n+1]:=maxlongint;
size[n+1]:=1;
right[n]:=n+1;
for i:=n downto 1 do
modify(i);
modify(-1);
end;
procedure init;
begin
fillchar(rev,sizeof(rev),false);
fillchar(left,sizeof(left),0);
fillchar(right,sizeof(right),0);
fillchar(mins,sizeof(mins),0);
fillchar(size,sizeof(size),0);
fillchar(add_x,sizeof(add_x),0);
data[0]:=maxlongint;
mins[0]:=maxlongint;
root:=-1;
readln(n);
for i:=1 to n do
readln(a[i]);
build;
readln(m);
head:=n+2;
maxc:=400001;
for i:=head to maxc do
next[i]:=i+1;
end;
procedure main;
begin
for i:=1 to m do
begin
read(ch);
case ch of
'A':
begin
while ch<>' ' do read(ch);
readln(st,wt,add_data);
root:=splay(root,wt+2);
root:=splay(root,st);
pushdown(left[right[root]],add_data);
modify(right[root]);
modify(root);
end;
'I':
begin
while ch<>' ' do read(ch);
readln(st,add_data);
root:=splay(root,st+2);
root:=splay(root,st+1);
y:=right[root];
data[head]:=add_data;
right[root]:=head;
right[head]:=y;
modify(head);
head:=next[head];
modify(root);
end;
'D':
begin
while ch<>' ' do read(ch);
readln(st);
root:=splay(root,st+2);
root:=splay(root,st);
left[right[root]]:=0;
modify(right[root]);
modify(root);
next[st]:=head;
head:=st;
end;
'M':
begin
while ch<>' ' do read(ch);
readln(st,wt);
root:=splay(root,wt+2);
root:=splay(root,st);
writeln(mins[left[right[root]]]);
end;
'R':
begin
read(ch2,ch2,ch2);
if ch2='E' then
begin
while ch2<>' ' do read(ch2);
readln(st,wt);
root:=splay(root,wt+2);
root:=splay(root,st);
deal(left[right[root]],true);
end
else if ch2='O' then
begin
while ch2<>' ' do read(ch2);
readln(st,wt,t);
while t<0 do t:=t+wt-st+1;
t:=t mod (wt-st+1);
st2:=wt-t;
if t<>0 then
begin
root:=splay(root,wt+2);
root:=splay(root,st);
left[right[root]]:=splay(left[right[root]],st2+2-st);
left[right[root]]:=splay(left[right[root]],wt-st+1);
root_n:=left[right[root]];
temp:=left[root_n];
right[root_n]:=left[temp];
left[temp]:=0;
modify(temp);
modify(root_n);
end;
end;
end;
end;
end;
end;
begin
init;
main;
end.
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator