题意

\(n\)个人,每个人属于一个班级\(ci\),这些人会有些小团体(并查集)

两种操作:

  • \(1\) \(a\) \(b\),将\(a\)所在的集体和\(b\)所在的集体合并
  • \(2\) \(x\) \(y\),问在\(x\)的集体中有多少人在\(y\)班

分析

看\(1\)操作是并查集,每一个人一开始有一个权值,如果两个集体合并,那么需要将他们的权值合并

看上去就像是线段树合并(前段时间刚学的)

一开始所有人都有一个根,对于他们的班级权值为\(1\)

对于\(1\)操作,找到\(a\)和\(b\)的祖先节点,合并两者的线段树,并进行并查集合并

对于\(2\)操作,查询即可

数组要开大点,反正有\(1024MB\)

#pragma GCC optimize(3, "Ofast", "inline")

#include <bits/stdc++.h>

#define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
//#define int ll
//#define ls st<<1
//#define rs st<<1|1
#define pii pair<int,int>
#define rep(z, x, y) for(int z=x;z<=y;++z)
#define repd(z, x, y) for(int z=x;z>=y;--z)
#define com bool operator<(const node &b)const
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const int maxn = (ll) 1e7 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
int T = 1;
int ls[maxn], rs[maxn], val[maxn], n, tot;
int pre[maxn]; int find(int x) {
if (pre[x] != x)
pre[x] = find(pre[x]);
return pre[x];
} int rt[maxn]; void Modify(int &u, int l, int r, int p) {
if (!u) u = ++tot;
if (l == r) {
val[u]++;
return;
}
int mid = l + r >> 1;
if (p <= mid) Modify(ls[u], l, mid, p);
else Modify(rs[u], mid + 1, r, p);
} int merge(int u, int v, int l, int r) {
if (!u || !v) return u | v;
if (l == r) {
val[u] += val[v];
return u;
}
int mid = (l + r) >> 1;
ls[u] = merge(ls[u], ls[v], l, mid);
rs[u] = merge(rs[u], rs[v], mid + 1, r);
return u;
} int query(int u, int l, int r, int p) {
if (l == r)
return val[u];
int mid = l + r >> 1;
if (p <= mid) return query(ls[u], l, mid, p);
else return query(rs[u], mid + 1, r, p);
} void solve() {
int q;
cin >> n >> q;
rep(i, 1, n)rt[i] = i, pre[i] = i;
tot = n;
rep(i, 1, n) {
int c;
cin >> c;
Modify(rt[i], 1, n, c);
}
while (q--) {
int op, x, y;
cin >> op >> x >> y;
if (op == 1) {
x = find(x);
y = find(y);
if (x == y)
continue;
merge(rt[x], rt[y], 1, n);
pre[y] = x;
} else {
x = find(x);
cout << query(rt[x], 1, n, y) << '\n';
}
}
} signed main() {
start;
while (T--)
solve();
return 0;
}

AtCoder ABC183F Confluence的更多相关文章

  1. AtCoder Beginner Contest 183

    第二次ak,纪念一下. 比赛链接:https://atcoder.jp/contests/abc183/tasks A - ReLU 题解 模拟. 代码 #include <bits/stdc+ ...

  2. Confluence Wiki -- 页面限制

    Confluence Wiki 中 [页面设置] 应该如何理解? 当一个用户有这个权限后,这个用户可以对一个页面做限制,可以限制这个页面不能被其他用户浏览或编辑: 反之,如果没有这个权限,那么这个用户 ...

  3. jquery in confluence.

    https://confluence.atlassian.com/confkb/how-to-use-javascript-in-confluence-313458839.html https://a ...

  4. Recover lost Confluence password

    confluence重置admin密码 复方法: 1. 运行此sql 找到你的管理员帐户: select u.id, u.user_name, u.active from cwd_user u joi ...

  5. Confluence自启动脚本

    由于confluence用rc.local是无法自启动的,所以这里附上confluence的启动脚本 将以下脚本拷贝到/etc/init.d/confluenced # cd /etc/init.d/ ...

  6. confluence的安装、备份和恢复(wiki)

    还有一种比较不错的wiki工具MediaWiki 安装教程参考 http://pangge.blog.51cto.com/6013757/1560249 我是按照上面的教程搭建的 还有几篇不错的文章 ...

  7. confluence安装

    confluence安装 1.jre安装 java下载http://www.java.com/zh_CN/download/manual.jsp 创建目录和解压缩 mkdir -p /usr/loca ...

  8. [Tools]迁移Confluence, JIRA, Fisheye

    [背景] 原先的Confluence, JIRA, Fisheye都部署在一台服务器(192.168.200.203)上,导致这台机器太卡,公司又分配了两台虚拟机来分开这几个应用(192.168.20 ...

  9. confluence重置admin密码

    复方法: 1. 运行此sql 找到你的管理员帐户: select u.id, u.user_name, u.active from cwd_user u join cwd_membership m o ...

  10. Confluence部署攻略 [转]

    一.软件介绍 AtlassianConfluence(简称Confluence)是一个专业的wiki程序.它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享.Confluence不是一 ...

随机推荐

  1. CST为什么要关闭 GPU 卡的 ECC 模式而开启 TCC 模式?操作使用【详解】

    在使用CST软件之前,我们一般建议大家关闭 GPU 卡的 ECC 模式而开启 TCC 模式.那么,为什么要进行这样一个操作呢?在此之前,给大家科普一下什么是"ECC"和" ...

  2. odoo总结---类继承和视图继承

    类继承 自从有了类,就有继承,继承是类最大的特性,ODOO开发有不例外,先ODOO集采总结如下: 1)类继承:扩展类中没有_name属性,因为它继承了父类的_name.对现有模型的扩展, 添加新功能, ...

  3. uniapp 全局背景音乐播放+暂停(跳转页面不暂停)

    最近需要一个功能 是在h5中播放小游戏的背景音乐,但是跳转界面之后音乐不暂停,就是跳转多个页面之后,音乐依然在播放,在游戏界面会有设置的静音的按钮,可以开启音乐和关闭音乐. 单独建了一个music.j ...

  4. “古老”编程语言的最新选择!华为云发布CodeArts IDE for C/C++

    摘要:华为云CodeArts IDE for C/C++正式上线,欢迎体验. 本文分享自华为云社区<"古老"编程语言的最新选择!华为云发布CodeArts IDE for C ...

  5. Python time strftime() 方法的使用

    1.描述 strftime() 用于格式化时间,返回以可读字符串表示的时间,格式自定义. 2.说明 python中日期和时间的格式化符号有很多,下面列举常用的符号:  %y 两位数的年份表示(00-9 ...

  6. 国标GB28181协议客户端开发(一)整体流程和技术选型

    国标GB28181协议客户端开发(一)整体流程和技术选型 本系列文章将介绍国标GB28181协议设备端的开发过程.本文旨在探讨整体设计和技术选型方面的考虑,为开发人员提供指导和参考.文章将从设备端开发 ...

  7. 高并发场景下,6种解决SimpleDateFormat类的线程安全问题方法

    摘要:解决SimpleDateFormat类在高并发场景下的线程安全问题可以有多种方式,这里,就列举几个常用的方式供参考. 本文分享自华为云社区<[高并发]更正SimpleDateFormat类 ...

  8. gitlab配置环境及pycharm配置

    一.gitlab介绍 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 git.gitlab.GitHub的简单区别 git 是一种基于命令 ...

  9. java后台导出表格文件

    Java类所需jar包 import java.io.File; import java.io.IOException; import java.io.InputStream; import java ...

  10. 一文详解 Okio 输入输出流

    在 OkHttp 的源码中,我们经常能看到 Okio 的身影,这篇文章,我们把Okio拿出来进行一个详细的介绍学习. 输入输出的概念简述 Okio 简介 工程中引入 Okio API 简介及使用介绍 ...