bzoj1012: [JSOI2008]最大数maxnumber

来源:互联网 发布:单片机制作简单小应用 编辑:程序博客网 时间:2024/05/13 12:47

传送门

单调队列裸题。

维护一个单调队列,队列头元素大,尾元素小,存储数值和坐标,修改时用O(1)的时间插入,询问时用O(log)的时间二分查找在区间内的最大点。

PS:刷水题有益于健康。

/**************************************************************    Problem: 1012    User: zhouyuyang    Language: Pascal    Result: Accepted    Time:832 ms    Memory:1972 kb****************************************************************/ uses math;var  a,b:array [0..200005] of longint;  n,modd,last,len,i,x,top,l,r,m:longint;  ch:char;begin  readln(n,modd);  last:=0;  len:=0;  for i:=1 to n do begin    read(ch); readln(x);    if (ch='A') then begin      inc(len); x:=(x+last) mod modd;      while (a[top]<=x) and (top>0) do dec(top);      inc(top); a[top]:=x; b[top]:=len;    end    else begin      l:=1; r:=top;      while (l<r) do begin        m:=(l+r) div 2;        if (b[m]<len-x+1) then l:=m+1 else r:=m;      end;      writeln(a[l]); last:=a[l];    end;  end;end.



0 0