FZU_1894 誌願者選拔 【單調隊列】
阿新 • • 發佈:2019-04-25
amp 分析 pac int sin esp div 第一個 %s
1 題面
FZU1894
2 分析
單調隊列的典型引用
需要註意的是在用維護輔助隊列的時候,$L$和$R$的初始化都是0時,隊列第一個數就是$L$,最後一個數就是$R-1$。
3 AC代碼
#include <cstdio> #include <iostream> using namespace std; const int MAXN = 1e6 + 15; int MQue[MAXN], Que[MAXN]; int L, R, LQ, RQ; void insert(int value) { Que[RQ++] = value;while(L != R && MQue[R-1] <= value) R--; MQue[R++] = value; } int query() { if(L == R) return -1; else return MQue[L]; } void pop() { //把輔助隊列裏的最大值去掉,因為這個值當前最大 //輔助隊列裏現在存在的數肯定比該數後到,可以達到維護的效果 if(LQ == RQ) return; if(MQue[L] == Que[LQ]) L++; LQ++; } int main() { //freopen("input.txt", "r", stdin); //freopen("out.txt", "w", stdout); int T; scanf("%d", &T); while(T--) { L = R = 0; LQ = RQ = 0; char s[6], op; scanf("%s", s); while(scanf("%s", s)) {if(s[0] == ‘E‘) break; if(s[0] == ‘Q‘) { //查詢 printf("%d\n", query() ); } else if(s[0] == ‘G‘) { //出隊 pop(); } else { int v; scanf("%s%d", s, &v); insert(v); } } } return 0; }
FZU_1894 誌願者選拔 【單調隊列】