fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define GG ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  4. bool isPossible(vector<int>v,int n,int x)
  5. { int fullx=x*2,l1=0,l2=0,r1=0,r2=0;
  6. for(int i=0;i<x;i++)
  7. { if(v[i]==1) l1++;
  8. else l2++;
  9. }
  10. for(int i=x;i<fullx;i++)
  11. { if(v[i]==1) r1++;
  12. else r2++;
  13. }
  14. if( (l1==x && l2==0) && (r1==0 && r2==x) )
  15. return 1;
  16. else if( (l1==0 && l2==x) && (r1==x && r2==0) )
  17. return 1;
  18.  
  19. for(int i=fullx;i<n;i++)
  20. {
  21. if(v[i-fullx]==1) l1--;
  22. else if(v[i-fullx]==2) l2--;
  23.  
  24. if(v[i-fullx+x]==1) { l1++; r1--;}
  25. else { l2++; r2--; }
  26.  
  27. if(v[i]==1) r1++;
  28. else if(v[i]==2) r2++;
  29.  
  30. if( (l1==x && l2==0) && (r1==0 && r2==x) )
  31. return 1;
  32. else if( (l1==0 && l2==x) && (r1==x && r2==0) )
  33. return 1;
  34. }
  35. return 0;
  36. }
  37.  
  38. int BS(vector<int> v,int n)
  39. {int l=1,mid,r=n/2,ans;
  40. while(l<=r)
  41. { mid=(l+r)/2;
  42. if(isPossible(v,n,mid))
  43. {ans=mid;
  44. l=mid+1;
  45. }
  46. else
  47. r=mid-1;
  48. }
  49. return ans*2;
  50. }
  51.  
  52. int main () { GG;
  53. int n; cin>>n;
  54. vector<int>v(n);
  55. for(int i=0;i<n;i++) cin>>v[i];
  56.  
  57. cout<<BS(v,n)<<"\n";
  58. return 0;}
Success #stdin #stdout 0.01s 5280KB
stdin
9
2 2 1 1 1 2 2 2 2
stdout
6