fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MaxN=2e5;
  5. const int MaxA=2e5;
  6. vector <int> pos[MaxA+1];
  7. int add[MaxN+1]={};
  8. int tag[MaxN+1]={};
  9.  
  10. int main() {
  11. int N,t,x;
  12. cin>>N;
  13. for(int n=1;n<=N;n++){
  14. cin>>t>>x;
  15. tag[n]=(t==1)?0:-1;
  16. if(t==1){
  17. pos[x].push_back(n);
  18. }
  19. if(t==2){
  20. if(pos[x].empty()){
  21. cout<<-1;
  22. return 0;
  23. }
  24. add[n]-=1;
  25. //位置等於n時減少一瓶藥水
  26. add[pos[x].back()]+=1;
  27. //位置等於pos[x].back時撿藥水
  28. tag[pos[x].back()]=1;
  29. pos[x].pop_back();
  30. }
  31. }
  32. int ans=0,maxans=0;
  33. for(int n=1;n<=N;n++){
  34. ans+=add[n];
  35. maxans=max(ans,maxans);
  36. }
  37. cout<<maxans<<"\n";
  38. for(int n=1;n<=N;n++){
  39. if(-1<tag[n])
  40. cout<<tag[n]<<" ";
  41. }
  42. return 0;
  43. }
Success #stdin #stdout 0.01s 8864KB
stdin
13
1 2
1 3
1 1
1 3
1 2
2 3
1 3
1 3
2 3
1 3
2 2
2 3
2 1
stdout
3
0 0 1 1 1 0 1 1