fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. bool isValid(int mid,vector<int>&nums,int middle){
  4. int ans=0;
  5. unordered_map<int,int>mp;
  6. int n=nums.size();
  7. int j=0;
  8. for(int i=0;i<n;i++){
  9. mp[nums[i]]++;
  10. while(mp.size()>mid){
  11. mp[nums[j]]--;
  12. if(mp[nums[j]]==0)mp.erase(nums[j]);
  13. j++;
  14. }
  15. ans+=(i-j+1);
  16. }
  17. return ans>=middle;
  18. }
  19. int main() {
  20. int n;
  21. cin>>n;
  22. vector<int>nums(n);
  23. for(int i=0;i<n;i++){
  24. cin>>nums[i];
  25. }
  26. int total=((n+1)*n)/2;
  27. int middle=total/2;
  28. int st=0;
  29. int end=n;
  30. int ans=0;
  31. while(st<=end){
  32. int mid=st+(end-st)/2;
  33. if(isValid(mid,nums,middle)){
  34. ans=mid;
  35. end=mid-1;
  36. }else{
  37. st=mid+1;
  38. }
  39. }
  40. cout<<ans<<endl;
  41. return 0;
  42. }
Success #stdin #stdout 0.01s 5288KB
stdin
6 1 5 2 1 3 5
stdout
2