POJ1281-MANAGER
http://poj.org/problem?id=1281
第一遍读题目可能有点不明白,就是要模拟几种操作,a加入,r删除(如果可能),p删除,e终止。
双端队列很吊的样子,虽然还不太会,先在这里记录一下吧。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<deque> using namespace std; int main(void) { int i,iN,iMax,iNum,iPolicy; char chRequest; deque<int> qDate,qRemove,qDel; while(scanf("%d",&iMax)==1) { qDate.clear(); qRemove.clear(); qDel.clear(); iPolicy=1; scanf("%d",&iN); for(i=0;i<iN;i++) { scanf("%d",&iNum); qRemove.push_back(iNum); } while(scanf("%c",&chRequest)==1) { if(chRequest=='e') break; if(chRequest=='p') { scanf("%d",&iPolicy); continue; } if(chRequest=='a') { scanf("%d",&iNum); if(iNum>iMax) continue; qDate.push_back(iNum); continue; } if(chRequest=='r') { if(qDate.size()>0) { if(iPolicy==1) { qDel.push_back(*min_element(qDate.begin(),qDate.end())); sort(qDate.begin(),qDate.end()); qDate.pop_front(); } else { qDel.push_back(*max_element(qDate.begin(),qDate.end())); sort(qDate.begin(),qDate.end()); qDate.pop_back(); } } else { cout<<"-1"<<endl; continue; } } } for(i=0;i<iN;i++) { if(qRemove[i]<=qDel.size()) cout<<qDel[qRemove[i]-1]<<endl; } cout<<endl; } return 0; }