分类讨论题,用一个set维护1操作,当2操作来到的时候讨论此时是否满足条件即可。
#include<bits/stdc++.h> #define int long long #define double long double #define x first #define y second using namespace std; typedef long long LL; typedef long long ll; typedef pair<int,int> PII; const int N=3e5+10; const int M=1e3+10; int mod=1e9+7; int a[N]; void solve(){ int n,m;cin>>n>>m; set<int>st; int flag=0,cnt=0; for(int i=1;i<=m;i++){ int op;cin>>op; if(op==1){ int x;cin>>x; st.insert(x); }else{ int x;cin>>x; if(st.find(x)!=st.end()||cnt>=2||(flag&&flag!=x)){ cout<<i<<"\n"; return ; } if(x!=flag){ cnt++; flag=x; } } if(st.size()==n||(st.find(flag)!=st.end())){ cout<<i<<"\n"; return ; } } cout<<-1<<"\n"; } signed main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int _; _=1; //cin>>_; while(_--){ solve(); } }