就是想实现输入一个n然后输入n个数
应该就是连续相同的就是一块,然后输出当前点所处的块的最后一个的下表
输入:
5
1 1 1 0 0
输出:
3 3 3 5 5
输入:
5
1 0 1 0 0
输出:
1 2 3 5 5
我的代码:
#include<bits/stdc++.h>
using namespace std;
int n,f[200010],a[200010];
int getfa(int x){return x==f[x]?x:f[x]=getfa(f[x]);}
void merge(int a,int b){if(getfa(a)!=getfa(b))f[getfa(a)]=getfa(b);return;}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],f[i]=i;
for(int i=1;i<=n;i++)for(;a[i]==a[i+1];i++)merge(i,i+1);
for(int i=1;i<=n;i++)cout<<getfa(i)<<" ";
return 0;
}
调了好久都没有找到错,