社区讨论
求改正代码
P3201[HNOI2009] 梦幻布丁参与者 4已保存回复 29
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 29 条
- 当前快照
- 1 份
- 快照标识符
- @lzxytsd8
- 此快照首次捕获于
- 2024/08/17 17:58 2 年前
- 此快照最后确认于
- 2024/08/17 20:58 2 年前
有没有大佬能帮忙看看
CPP#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
const ll maxn=1000010;
ll now[maxn],color[maxn];
ll ans;
vector<ll> G[maxn];
inline void merge(ll x,ll y) {
for (ll i=0;i<G[x].size();++i) {
if (color[G[x][i]+1]==y) ans--;
if (color[G[x][i]-1]==y) ans--;
}
for (ll i=0;i<G[x].size();++i) color[G[x][i]]=y;
for (ll i=0;i<G[x].size();++i) G[y].push_back(G[x][i]);
G[x].clear();
}
inline ll in() {
char a=getchar();
ll t=0,f=1;
while(a<'0'||a>'9') {if (a=='-') f=-1;a=getchar();}
while(a>='0'&&a<='9') {t=(t<<1)+(t<<3)+a-'0';a=getchar();}
return t*f;
}
signed main() {
ll n=in(),m=in();
for (ll i=1;i<=n;++i) {
color[i]=in();
now[color[i]]=color[i];
if (color[i]!=color[i-1]) ans++;
G[color[i]].push_back(i);
}
// for (int i : G[9]) cout<<i<<" ";
for (ll i=1;i<=m;++i) {
ll opt=in();
if (opt==2) printf("%lld\n",ans);
else {
ll x=in(),y=in();
if (x==y) continue;
if (G[x].size()>G[y].size()) {
merge(now[y],now[x]);
swap(now[x],now[y]);
}
else merge(now[x],now[y]);
}
}
return 0;
}
回复
共 29 条回复,欢迎继续交流。
正在加载回复...