基础stack queue priority_queue的使用
#include<bits/stdc++.h>
using namespace std;
int a[1020],b[1020];
int n;
bool isStack()
{
stack<int>s;
for(int i=1;i<=n;i++)
{
if(a[i]==1)
s.push(b[i]);
else
{
if(s.empty())
return false;
int k=s.top();
s.pop();
if(b[i]!=k)
return false;
}
}
return true;
}
bool isQueue()
{
queue<int>q;
for(int i=1;i<=n;i++)
{
if(a[i]==1)
q.push(b[i]);
else
{
if(q.empty())
return false;
int k=q.front();
q.pop();
if(b[i]!=k)
return false;
}
}
return true;
}
bool isPriorityQueue()
{
priority_queue<int>q;
for(int i=1;i<=n;i++)
{
if(a[i]==1)
q.push(b[i]);
else
{
if(q.empty())
return false;
int k=q.top();
q.pop();
if(b[i]!=k)
return false;
}
}
return true;
}
int main()
{
while(scanf("%d",&n)==1)
{
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
if(!isStack()&&!isQueue()&&!isPriorityQueue())
printf("impossible\n");
else if(isStack()&&!isQueue()&&!isPriorityQueue())
printf("stack\n");
else if(!isStack()&&isQueue()&&!isPriorityQueue())
printf("queue\n");
else if(!isStack()&&!isQueue()&&isPriorityQueue())
printf("priority queue\n");
else
printf("not sure\n");
}
return 0;
}