zoukankan      html  css  js  c++  java
  • 【单调队列+二分查找】bzoj 1012: [JSOI2008]最大数maxnumber

    【题意】

    维护一个单调递减的q数组,用id数组记录q数组的每个下标对应在原数组的位置,那么id数组一定有单调性(q数组中越靠后,原数组中也靠后),然后二分查找这个数

    【AC】

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int n,d;
     5 const int maxn=2e5+2;
     6 int q[maxn],id[maxn];
     7 int tail;int cnt;
     8 int last;
     9 void add(int x)
    10 {
    11     while(tail&&q[tail]<=x) tail--;
    12     q[++tail]=x;id[tail]=++cnt;
    13 }
    14 int query(int x)
    15 {
    16     int l=cnt-x+1;
    17     int pos=lower_bound(id+1,id+tail+1,l)-id;
    18     return q[pos];
    19 }
    20 void init()
    21 {
    22     memset(q,0,sizeof(q));
    23     memset(id,0,sizeof(id));
    24     tail=0;
    25     cnt=0;
    26     last=0;
    27 }
    28 int main()
    29 {
    30     while(~scanf("%d%d",&n,&d))
    31     {
    32         init();
    33         char op[2];int x;
    34         while(n--)
    35         {
    36             scanf("%s%d",op,&x); 
    37             if(op[0]=='A')
    38             {
    39                 add((x+last)%d);
    40             }
    41             else
    42             {
    43                 printf("%d
    ",last=query(x));
    44             }
    45         }
    46     }
    47     return 0;
    48 }
    View Code
  • 相关阅读:
    习题4.7利用vector实现数据复制
    习题4.18
    4.8编写一小段程序实现两vector是否相等的比较
    关于野指针
    学习c++的50条忠告
    c++头文件
    习题4.14
    容器和迭代器
    Android上C++对象的自动回收机制分析
    Windows下载Android源码
  • 原文地址:https://www.cnblogs.com/itcsl/p/7443281.html
Copyright © 2011-2022 走看看