您的位置:首页 > 其它

FZU 1894 志愿者选拔 单调队列

2016-11-02 21:08 232 查看
题目连接: http://acm.fzu.edu.cn/problem.php?pid=1894

有出队入、队操作,查找最大值 操作

直接用单调队列模拟

代码:

#include <cstdio>
#define sf scanf
#define pf printf

using namespace std;
const int maxn = 1000000 + 5;
int q[maxn],v[maxn];
int qf,qt;
char op[10];
int main(){
int T;sf("%d",&T);
while( T-- ){
sf("%s",op);
int L = 0,R = 0;
qf = qt = 0;
while(sf("%s",op) && op[0] != 'E'){
if(op[0] == 'C'){
sf("%s",op);sf("%d",&v[R++]);
while(qf != qt && v[q[qt - 1]] <= v[R - 1]) qt--;
q[qt++] = R - 1;
}
else if(op[0] == 'Q'){
if(L == R) pf("-1\n");
else pf("%d\n",v[q[qf]]);
}
else{
L++;
while(qf != qt && q[qf] < L) qf++;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: