分析:
如果使用純暴力的話會TLE的,問題的‘G’只求隊列中的最大值,可以使用單調隊列這個數據結構來維護隊列中的最大值
Code:
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define REPI(i, s, e) for(int i = (s); i <= (e); i ++)
#define REPD(i, e, s) for(int i = (e); i >= (s); i --)
const int MAXLEN = 10;
char str[MAXLEN];
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
#endif
int cas;
deque<int> q;
deque<int> dq;
scanf("%d", &cas);
REPI(k, 1, cas) {
q.clear();
dq.clear();
while( scanf("%s", str) ) {
if( !strcmp(str, "START") ) {
continue;
}
else if( !strcmp(str, "END") ) {
break;
}
else if( !strcmp(str, "C") ) {
int rp;
scanf("%s %d", str, &rp);
q.push_back(rp);
while( !dq.empty() && dq.back() < rp ) {
dq.pop_back();
}
dq.push_back(rp);
}
else if( !strcmp(str, "G") ) {
if( dq.front() == q.front() ) {
dq.pop_front();
}
q.pop_front();
}
else if( !strcmp(str, "Q") ) {
if( dq.empty() ) {
printf("-1\n");
}
else {
printf("%d\n", dq.front());
}
}
}
}
return 0;
}