求调
查看原帖
求调
580202
Siegerkranz_2735楼主2022/10/7 13:13

就是想实现输入一个nn然后输入nn个数

应该就是连续相同的就是一块,然后输出当前点所处的块的最后一个的下表

输入:

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;
}

调了好久都没有找到错,

2022/10/7 13:13
加载中...