zoukankan      html  css  js  c++  java
  • FZU 1894 志愿者选拔 (单调队列)

     1 /******************************************************************
     2 题目:           志愿者选拔(FZU 1894)
     3 算法:          单调队列
     4 算法思想:      在每个元素入队的时候入队的时候,使队列单调,查找
     5                  的时候就能很快找到最值。
     6 *******************************************************************/
     7 #include<cstdio>
     8 #include<cstring>
     9 #include<algorithm>
    10 #include<iostream>
    11 using namespace std;
    12 
    13 const int mx=1000006;
    14 struct Q
    15 {
    16     int x,di;
    17 };
    18 Q q[mx];
    19 char s[10];
    20 
    21 int main()
    22 {
    23     int t;
    24     scanf("%d",&t);
    25     while (t--)
    26     {
    27         int h=0,r=-1;                       ///h为对头,r为队尾
    28         int cut=0,id=0;                     ///cut为删除数的个数,id为插入数的下标。
    29         scanf("%s",s);
    30         while (~scanf("%s",s))
    31         {
    32             if (s[0]=='E') break;
    33             if (s[0]=='G') cut++;
    34             if (s[0]=='Q')
    35             {
    36                 if (cut>=id) printf("-1
    ");     ///删除数个数大于等于最大数id,队列为空
    37                 else
    38                 {
    39                     while (q[h].di<=cut) h++;    ///由于队列是单调的,所以只要找到第一个没
    40                                                  ///有被删除数就是最大数,只要一个数的id大于
    41                                                  ///删除数的个数,那么这个数就没有被删除
    42                     printf("%d
    ",q[h].x);
    43                 }
    44             }
    45             if (s[0]=='C')
    46             {
    47                 int x;
    48                 scanf("%s%d",s,&x);
    49                 while (r>=h&&q[r].x<x)          ///找到这个数要插入的为,使队列从头到尾是单调
    50                                                 ///的,这样做虽然会覆盖一些数,但是覆盖的数已
    51                                                 ///经不会再输出了。
    52                 {
    53                     r--;
    54                 }
    55                 q[++r].x=x;
    56                 q[r].di=++id;
    57             }
    58         }
    59     }
    60 }
  • 相关阅读:
    java课后作业-4
    课堂练习
    16年9月27日上午
    《大道至简》第二章读后感
    《大道至简》-编程的精义读后感
    用Windbg来看看CLR的JIT是什么时候发生的
    如何调试什么时候SaveFileDialog会被Dispose
    针对C#程序做性能测试的一些基本准则
    要注意null合并运算符的优先级比+还要低
    实现GetHashCode时要遵循的规则
  • 原文地址:https://www.cnblogs.com/pblr/p/5735855.html
Copyright © 2011-2022 走看看