分析:
如果使用純暴力的話會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;
}
单调队列实现C/G指令解析
本文介绍了一种利用单凋队列解决特定问题的方法。通过分析指令集,特别是针对'C'(插入元素)和'G'(删除元素并保持最大值更新)的操作,实现了高效的数据结构维护。代码示例展示了如何处理这些操作,并维持队列中最大值的快速访问。
139

被折叠的 条评论
为什么被折叠?



