x入栈的同时 也加入集合b,
当a.top()!=num 直接reorder复杂度为n^2logn 改为清空栈,当栈为空时 表示栈已经有序,删除元素直接从集合中删除.
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e6+20; int n,p[N]; char s[20]; stack<int> a; set<int> b; int main() { while(cin>>n) { int num=1,ans=0; int x; int top=0; n=2*n; for(int i=1;i<=n;i++) { scanf("%s",s); if(s[0]==‘a‘) { scanf("%d",&x); a.push(x),b.insert(x); } else { if(!a.empty()) { if(a.top()!=num)//reorder ?úb?D??3ynum { ans++;//cout<<num<<endl; while(!a.empty()) a.pop(); } else a.pop(); } //è????a???ò±íê? ?3Dò′óμ?D?1ì?¨?éò??ú,?ˉo?b?Dé?3y b.erase(num); num++; } } cout<<ans<<endl; } return 0; }
时间: 2024-10-01 03:55:16