记录编号 | 50645 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 贪婪大陆 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | Pascal | 运行时间 | 0.439 s | ||
提交时间 | 2012-11-27 22:29:20 | 内存使用 | 3.22 MiB | ||
type rr=record left,right:longint; end; var tree:array[0..400000] of rr; n,m,tot,total,left,right:longint; procedure init; begin assign(input,'greedisland.in'); reset(input); assign(output,'greedisland.out'); rewrite(output); read(n,m); end; procedure terminate; begin close(input); close(output); halt; end; procedure insert1(t,i,l,r:longint); var mid:longint; begin if (r<i) or (l>i) then exit; if l=r then begin inc(tree[t].left); exit; end; mid:=(l+r) div 2; insert1(t*2,i,l,mid); insert1(t*2+1,i,mid+1,r); tree[t].left:=tree[t*2].left+tree[t*2+1].left; end; procedure insert2(t,i,l,r:longint); var mid:longint; begin if (r<i) or (l>i) then exit; if l=r then begin inc(tree[t].right); exit; end; mid:=(l+r) div 2; insert2(t*2,i,l,mid); insert2(t*2+1,i,mid+1,r); tree[t].right:=tree[t*2].right+tree[t*2+1].right; end; procedure get1(t,l,r:longint); var mid:longint; begin if (l>left) or (r<1) then exit; if (l>=1) and (r<=left) then begin inc(tot,tree[t].right); exit; end; mid:=(l+r) div 2; get1(t*2,l,mid); get1(t*2+1,mid+1,r); end; procedure get2(t,l,r:longint); var mid:longint; begin if (l>n) or (r<right) then exit; if (l>=right) and (r<=n) then begin inc(tot,tree[t].left); exit; end; mid:=(l+r) div 2; get2(t*2,l,mid); get2(t*2+1,mid+1,r); end; procedure main; var i,x,l,r:longint; begin total:=0; for i:=1 to m do begin read(x,l,r); if x=1 then begin insert1(1,l,1,n); insert2(1,r,1,n); inc(total); end else begin tot:=0; if l>1 then left:=l-1 else left:=0; get1(1,1,n); if r<n then right:=r+1 else right:=n; get2(1,1,n); writeln(total-tot); end; end; end; begin init; main; terminate; end.