821C
来源:互联网 发布:javascript招聘工资 编辑:程序博客网 时间:2024/06/07 02:29
Think:
1题意:模拟一个栈,有两种操作,栈顶增加一个元素,栈顶移除一个元素,要求元素按照编号大小移除,移除前可以选择是否调整栈内元素顺序,询问最少调整次数
2方法:优先队列+手动模拟栈
3反思:注意暴力模拟+排序会超时
codeforces题目链接
以下为Accepted代码
#include <bits/stdc++.h>using namespace std;const int N = 3e5 + 4;priority_queue <int, vector<int>, greater<int> > q;int tp, link[N];int main(){ int n, i, x, num; char st[14]; scanf("%d", &n); getchar(); tp = 0, num = 0; for(i = 1; i <= 2*n; i++){ scanf("%s", st); if(st[0] == 'a'){ scanf("%d", &x); q.push(x); link[tp++] = x; } else if(st[0] == 'r'){ if(tp){ int t = q.top(); if(t == link[tp-1]){ tp--; q.pop(); } else { num++; tp = 0; q.pop(); } } else { q.pop(); } } } printf("%d\n", num); return 0;}