zoukankan      html  css  js  c++  java
  • BZOJ-1012 最大数

    做一棵线段树,支持区间查询最大值和单点修改。

    先开一个能容纳200000个数的线段树,初始化全部数为0。

    查询的时候只需要找max(m-l+1,m),其中m是此时数列的长度。

    添加的时候就直接修改第m+1个数,然后m++。

    • var

    • n,d,t,i,a,m:longint;

    • c:char;

    • num:array[1..600005] of longint;

    • function max(a,b:longint):longint;

    • begin

    • if a>b then max:=a else max:=b;

    • end;

    • procedure add(a:longint);

    • var i:longint;

    • begin

    • inc(m);i:=262144+m;

    • num[i]:=a;

    • while i<>1 do

    •   begin

    •   i:=i div 2;

    •   num[i]:=max(num[2*i],num[2*i+1]);

    •   end;

    • end;

    • function que(s,e:longint):longint;

    • begin

    • que:=0;

    • inc(s,262144-1);inc(e,262144+1);

    • while e-s<>1 do

    •   begin

    •   if (s=(s div 2)*2)and(que<num[s+1]) then que:=num[s+1];

    •   if (e=(e div 2)*2+1)and(que<num[e-1]) then que:=num[e-1];

    •   s:=s div 2;e:=e div 2;

    •   end;

    • t:=que;

    • end;

    • begin

    • readln(n,d);

    • for i:=1 to n do

    •   begin

    •   read(c);readln(a);

    •   if c='A' then add((t+a) mod d) else writeln(que(m-a+1,m));

    •   end;

    • end.

  • 相关阅读:
    学习进度
    毕设进度
    学习进度
    毕设进度
    学习进度
    学习进度
    第一周冲刺评论总结&&针对评论总结的改进
    第一阶段成果展示
    团队冲刺--Seven
    团队冲刺--six
  • 原文地址:https://www.cnblogs.com/NanoApe/p/4396764.html
Copyright © 2011-2022 走看看