zoukankan      html  css  js  c++  java
  • BZOJ 1012 单调队列+二分

    单调队列是递减的,储存的是递减的元素的位置。

    然后询问的时候就在单调队列里面二分地寻找合适的最大值所在的位置

    最近二分总是写不对。不知道怎么了。。。以前从来没出过错。。。

    View Code
     1 #include <iostream>
     2 #include <cstdlib>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <algorithm>
     6 
     7 #define N 1000000
     8 #define INF 0x3f3f3f3f
     9 
    10 using namespace std;
    11 
    12 int q[N],m,d,h=1,t=1,num;
    13 int val[N],ans;
    14 
    15 inline int getans(int x)
    16 {
    17     int l=h,r=t-1,mid,res;
    18     while(l<=r)
    19     {
    20         mid=(l+r)>>1;
    21         if(x<=q[mid]) res=mid,r=mid-1;
    22         else l=mid+1;
    23     }
    24     return q[res];
    25 }
    26 
    27 inline void go()
    28 {
    29     scanf("%d%d",&m,&d);
    30     int a;
    31     char str[10];
    32     while(m--)
    33     {
    34         scanf("%s%d",str,&a);
    35         if(str[0]=='A')
    36         {
    37             val[++num]=(a+ans)%d;
    38             while(h<t&&val[q[t-1]]<=val[num]) t--;
    39             q[t++]=num;
    40         }
    41         else
    42         {
    43             ans=val[getans(num-a+1)];
    44             printf("%d\n",ans);
    45         }
    46     }
    47 }
    48 
    49 int main()
    50 {
    51     go();
    52     return 0;
    53 }
  • 相关阅读:
    Dll版本管理
    线程池ThreadPool
    关于sitemesh和freemark在struts2中的一些问题总结
    Google 怎么搜索
    android 设计模式
    android webview
    ios 基础数据类型
    android 常用
    android Handler vs Timer
    网站
  • 原文地址:https://www.cnblogs.com/proverbs/p/2865097.html
Copyright © 2011-2022 走看看