您的位置:首页 > 其它

FZU 1894 志愿者选拔

2013-08-09 10:27 267 查看
是个简单的单调队列,不多说了。

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <map>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef __int64 int64;
typedef long long ll;
#define M 100005
#define N 1000005
#define max_inf 0x7f7f7f7f
#define min_inf 0x80808080
#define mod 1000000007

int q
, rp
;

int main()
{
int t , i;
char op[10] , name[10];
int front , rear;
scanf("%d",&t);
while (t--)
{
scanf("%s",op);
int cnt = 0 , out = 0;
front = rear = 0;
while (scanf("%s",op) , strcmp(op,"END") != 0)
{
if (strcmp(op , "C") == 0)
{
scanf("%s%d",name,&rp[cnt]);
cnt++;
while (rear > front && rp[q[rear-1]] < rp[cnt-1])rear--;
q[rear++] = cnt-1;
}
else if (strcmp(op , "Q") == 0)
{
while (q[front] < out)front++;
if (front >= rear)
printf("-1\n");
else
printf("%d\n",rp[q[front]]);
}
else
{
out++;
}
}
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: