zoukankan      html  css  js  c++  java
  • 【单调栈】Bzoj 1012: 最大数maxnumber

    1012: [JSOI2008]最大数maxnumber

    Time Limit: 3 Sec  Memory Limit: 162 MB
    Submit: 6255  Solved: 2676
    [Submit][Status][Discuss]

    Description

    现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个数。

    Input

    第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足(0

    Output

    对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。

    Sample Input

    5 100
    A 96
    Q 1
    A 97
    Q 1
    Q 2

    Sample Output

    96
    93
    96

      不小心水了一个单调栈过了。。(维护单调性二分)
      CLJ高级做法:http://wjmzbmr.com/archives/jsoi2008_maximum_number_maxnumber_of/  
      
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 
     6 #define maxn 200001
     7 
     8 typedef long long ll;
     9 
    10 using namespace std;
    11 
    12 struct node{
    13     ll c;
    14     int pos;
    15 }sta[maxn];
    16 
    17 ll top=0;
    18 
    19 inline ll in()
    20 {
    21     ll x=0;char ch=getchar();
    22     while(ch<'0'||ch>'9')ch=getchar();
    23     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    24     return x;
    25 }
    26 
    27 void add(ll num,int pos)
    28 {
    29     while(sta[top].c<=num&&top!=0)top--;
    30     top++;
    31     sta[top].c=num,sta[top].pos=pos;
    32 }
    33 
    34 ll ask(int r,int pos)
    35 {
    36     int l=1,an;
    37     while(l<=r)
    38     {
    39         int mid=(l+r)>>1;
    40         if(sta[mid].pos>=pos)r=mid-1,an=mid;
    41         else l=mid+1;
    42     }
    43     return sta[an].c;
    44 }
    45 
    46 int main()
    47 {
    48     int n,nownum=0;
    49     ll d,num,lastans=0;
    50     char sb;
    51     n=in(),d=in();
    52     for(int i=1;i<=n;i++)
    53     {
    54         sb=0;
    55         while(sb!='A'&&sb!='Q')sb=getchar();
    56         num=in();
    57         if(sb=='Q')printf("%lld
    ",lastans=ask(top,nownum-num+1));
    58         else add((num%d+lastans%d)%d,++nownum);
    59     }
    60     return 0;
    61 }
    View Code

      ps:最近脑残各种小地方打错。。

      是时候考试开始写对拍了。。

        ps:初赛76简直了。。想想如果不是在HN而是ZJ而搞OI那早就以一种奇怪的方式结束OI生涯了。。而且错的貌似都是OI知识?(指针,容斥,catanlan什么的)。。感觉自己学的还是不是太扎实
  • 相关阅读:
    SDL的视频子系统
    SDL事件处理
    视频子系统中构基本概念和常用数据结
    ASP.NET程序打包的时候如何把TreeView一起打包(转)
    Javascript实现在DataGrid或DataList等容器上的CheckBox全选和取消
    Javascript实现DataGrid或DataList等容器上面选择单选框RadioButton
    git push 报src refspec xxx does not match any的错误
    vue运行报错error:Cannot assign to read only property 'exports' of object '#<Object>'
    weex不支持类的动态追加
    函数的作用域链在定义时已经确定!!
  • 原文地址:https://www.cnblogs.com/tuigou/p/4870286.html
Copyright © 2011-2022 走看看