- #include<bits/stdc++.h>
- using namespace std;
- int a[100007];
- int cnt[100007];
- int main(){
- int n;
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- scanf("%d",&a[i]);
- int ans=1;
- set<int>s,num;// 数字出现的次数, 数字
- map<int,int>vis;// 记录数字出现的次数的个数
- cnt[a[1]]++;
- s.insert(cnt[a[1]]);
- num.insert(a[1]);
- vis[cnt[a[1]]]++;
- for(int i=2;i<=n;++i){
- vis[cnt[a[i]]]--;
- if(!vis[cnt[a[i]]])
- s.erase(s.find(cnt[a[i]]));
- cnt[a[i]]++;
- vis[cnt[a[i]]]++;
- s.insert(cnt[a[i]]);
- num.insert(a[i]);
- if(s.size()==2){
- if(*s.rbegin()-*s.begin()==1&&vis[*s.rbegin()]==1||*s.begin()==1&&vis[1]==1)// 有一个数字多出现了一次或者有一个数字只出现了一次
- ans=i;
- }
- else if(s.size()==1&&(num.size()==1||*s.begin()==1))// 只有一个数字或者都只出现了一次
- ans=i;
- }
- printf("%d",ans);
- return 0;
- }
来源: http://www.bubuko.com/infodetail-3053564.html