level 1
ffzuibang_as
楼主
vari,j,k,m,n,tt,ans,c1,c2,c3:longint;l,r,nl,nr,min,number:array[0..200001] of longint;
procedure build(a,b:longint);var k,x:longint;begininc(tt); x:=tt; min[tt]:=maxlongint;l[x]:=a; r[x]:=b;if b-a>1 thenbegink:=(a+b) shr 1;nl[x]:=tt+1; build(a,k);nr[x]:=tt+1; build(k+1,b);end;if b-a=1 thenbegin inc(tt); nl[x]:=tt; l[tt]:=a; r[tt]:=a; min[tt]:=maxlongint; inc(tt); nr[x]:=tt; r[tt]:=b; l[tt]:=b; min[tt]:=maxlongint;end;
end;
function little(x,y:longint):longint;beginif min[x]>min[y] then exit(min[y]) else exit(min[x]);end;
procedure insert(t,x,y:longint);var a,b,k:longint;beginif t=0 then exit;a:=l[t]; b:=r[t]; k:=(a+b) shr 1;if x<=k then insert(nl[t],x,y);if x>=k then insert(nr[t],x,y);if (b=a)and(a=x) thenbeginnumber[t]:=y;min[t]:=y; exit;end;if (nr[t]<>0)and(nl[t]<>0) thenmin[t]:=little(nr[t],nl[t]);end;
procedure produnce(t,x,y:longint);var a,b,k:longint;beginif t=0 then exit;a:=l[t]; b:=r[t]; k:=(a+b) shr 1;if (x<=a)and(b<=y)and(ans>min[t]) then ans:=min[t];if (x<=a)and(b<=y) then exit;if x<=k then produnce(nl[t],x,y);if y>=k then produnce(nr[t],x,y);end;
begin{assign(input,'11.in'); reset(input);assign(output,'11.out'); rewrite(output);}
read(n,m);build(1,n);for i:=1 to n dobeginread(k);insert(1,i,k);end;
for i:=1 to m dobeginread(c1,c2,c3);if c1=1 thenbeginans:=maxlongint;produnce(1,c2,c3);write(ans,' ');endelseinsert(1,c2,c3);end;{for i:=1 to tt dowriteln(l[i],' ',r[i],' ',nl[i],' ',nr[i],' ',number[i],' ',min[i]); }{close(input); close(output); }end.
2011年04月15日 07点04分
1
procedure build(a,b:longint);var k,x:longint;begininc(tt); x:=tt; min[tt]:=maxlongint;l[x]:=a; r[x]:=b;if b-a>1 thenbegink:=(a+b) shr 1;nl[x]:=tt+1; build(a,k);nr[x]:=tt+1; build(k+1,b);end;if b-a=1 thenbegin inc(tt); nl[x]:=tt; l[tt]:=a; r[tt]:=a; min[tt]:=maxlongint; inc(tt); nr[x]:=tt; r[tt]:=b; l[tt]:=b; min[tt]:=maxlongint;end;
end;
function little(x,y:longint):longint;beginif min[x]>min[y] then exit(min[y]) else exit(min[x]);end;
procedure insert(t,x,y:longint);var a,b,k:longint;beginif t=0 then exit;a:=l[t]; b:=r[t]; k:=(a+b) shr 1;if x<=k then insert(nl[t],x,y);if x>=k then insert(nr[t],x,y);if (b=a)and(a=x) thenbeginnumber[t]:=y;min[t]:=y; exit;end;if (nr[t]<>0)and(nl[t]<>0) thenmin[t]:=little(nr[t],nl[t]);end;
procedure produnce(t,x,y:longint);var a,b,k:longint;beginif t=0 then exit;a:=l[t]; b:=r[t]; k:=(a+b) shr 1;if (x<=a)and(b<=y)and(ans>min[t]) then ans:=min[t];if (x<=a)and(b<=y) then exit;if x<=k then produnce(nl[t],x,y);if y>=k then produnce(nr[t],x,y);end;
begin{assign(input,'11.in'); reset(input);assign(output,'11.out'); rewrite(output);}
read(n,m);build(1,n);for i:=1 to n dobeginread(k);insert(1,i,k);end;
for i:=1 to m dobeginread(c1,c2,c3);if c1=1 thenbeginans:=maxlongint;produnce(1,c2,c3);write(ans,' ');endelseinsert(1,c2,c3);end;{for i:=1 to tt dowriteln(l[i],' ',r[i],' ',nl[i],' ',nr[i],' ',number[i],' ',min[i]); }{close(input); close(output); }end.