[NOI online2022提高B] 讨论
题目描述
有 \(n\) 个人正在打模拟赛,模拟赛有 \(n\) 道题目。
有两人都会的题目并且没有人会的题目包含另一个人时,两者之间才会讨论。
(定义第 ii 个人会的题目的集合为 \(S_i\) ,即当 \(S_x\cap S_y\neq\varnothing\land S_x\not\subseteq S_y\land S_y\not\subseteq S_x\)时,第 \(x\) 人和第 \(y\) 人会讨论)
为了让模拟赛的效果更好,希望你可以找出一对会讨论的人或判断不存在。
输入格式
第一行一个正整数 \(T\) 表示数据组数,对于每组数据:
第一行一个正整数 \(n\) 表示人数和题目数量。
接下来 \(n\) 行,第 \(i\) 行第一个自然数 \(k_i\),表示第 \(i\) 个人会 \(k_i\)道题。接下来 \(k_i\)个正整数,每个数 \(x\) 表示第 \(i\) 个人会第 \(x\) 道题。
输出格式
对于每组数据:
如果没有会讨论的人,输出 NO。
否则第一行输出 YES,第二行输出两个正整数 \(x\) 和 \(y\),表示第 \(x\) 人和第 \(y\) 人会讨论。
如果有多种方案,输出任意一种即可。
输入输出样例
输入 #1
2
5
4 1 2 3 5
3 1 2 3
2 1 2
1 1
1 4
4
3 1 2 3
3 2 3 4
0
4 1 2 3 4
输出 #1
NO
YES
1 2
这题其实没有考任何的算法。简化题意,两个人会讨论,当且仅当他们有共同会的题目并且不存在一个人会的题目另一个人都会。
包含关系肯定是数量多的包含数量小的,所以我们把所有集合按大小从大到小排序后,如果我们就可以只需判断这个人会不会被之前的人包含就行了。
我们可以在一个数组上去判断两个人有没有共同会的题。也就是我们每看完一个人都在数组上把他会的题标上他的序号,对于一个人,我们枚举所有他会的题,看一下是否出现了不同的会的人。我们暂且把暂时没有人会也当作一个人。那么如果他的所有的会的题标的都是没有人,那么他没有和其他人有交集。如果都是一个人,那么他就被那个人包含了。如果出现了两个人,可以发现,他一定和集合数量小的那个人有讨论。整体其实没有考什么算法,只是单纯的用数组判断集合的关系罢了。
#include<cstdio>
const int N=5e5+5;
int n,q,a[N],b[N],st[N],rt[N],idx,tp,l,r;
struct node{
int s,lc,rc;
}tr[N*40];
inline int read()
{
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-48;
ch=getchar();
}
return x*f;
}
void insert(int o,int p,int l,int r,int x)
{
if(l==r)
{
tr[o].s=tr[p].s+1;
return;
}
int md=l+r>>1;
if(md>=x)
{
tr[o].lc=++idx,tr[o].rc=tr[p].rc;
insert(tr[o].lc,tr[p].lc,l,md,x);
}
else
{
tr[o].rc=++idx,tr[o].lc=tr[p].lc;
insert(tr[o].rc,tr[p].rc,md+1,r,x);
}
tr[o].s=tr[tr[o].rc].s+tr[tr[o].lc].s;
}
int ask(int o,int l,int r,int x,int y)
{
if(x<=l&&r<=y)
return tr[o].s;
int md=l+r>>1,ret=0;
if(md>=x)
ret+=ask(tr[o].lc,l,md,x,y);
if(md<y)
ret+=ask(tr[o].rc,md+1,r,x,y);
return ret;
}
int main()
{
// freopen("stack.in","r",stdin);
// freopen("stack.out","w",stdout);
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
a[i]=read();
for(int i=1;i<=n;i++)
b[i]=read();
for(int i=1;i<=n;i++)
{
while(tp&&(a[st[tp]]==a[i]||b[st[tp]]<=b[i]))
--tp;
rt[i]=++idx;
insert(rt[i],rt[i-1],0,n,st[tp]);
st[++tp]=i;
}
while(q--)
{
l=read(),r=read();
printf("%d\n",ask(rt[r],0,n,0,l-1)-ask(rt[l-1],0,n,0,l-1));
}
return 0;
}
[NOI online2022提高B] 讨论的更多相关文章
- NOI Online 提高组 题解
来补坑了-- 个人认为三道题难度差不多-- 还有要说一嘴,为啥我在其他网站代码都好好的,复制到 cnblogs 上 Tab 就成 8 空格了?不过也懒得改了. T1 序列 首先,遇到这种加一减一还带附 ...
- [NOI Online 提高组]冒泡排序
题目 洛谷等许多 \(OJ\) 都有 思路 考试题,今日无意又做了一次 然后发现自己读错题了······ 其实询问时只要 \(k\) 轮排序后的逆序对个数并不需要真的对序列进行更改 很显然 \(k\) ...
- NOI ONLINE 提高组 序列 根据性质建图
题目链接 https://www.luogu.com.cn/problem/P6185 题意 应该不难懂,跳过 分析 说实话第一眼看到这题的时候我有点懵,真不知道怎么做,不过一看数据,还好还好,暴力能 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P2409 Y的积木
P2409 Y的积木 77通过 491提交 题目提供者zhouyonglong 标签云端评测 难度普及+/提高 提交 讨论 题解 最新讨论 这组数据几乎可以卡掉所有程- 第一个题解有点问题 求教大 ...
- 洛谷P3379 【模板】最近公共祖先(LCA)
P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...
- 洛谷P3372 【模板】线段树 1
P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...
- 洛谷P3368 【模板】树状数组 2
P3368 [模板]树状数组 2 102通过 206提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 如题,已知一个数列,你需要进行下面两 ...
- 洛谷P3374 【模板】树状数组 1
P3374 [模板]树状数组 1 140通过 232提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 题目描述有误 题目描述 如题,已知一个数列,你需要进行下面两 ...
- 洛谷P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...
随机推荐
- 【Bash】rm -r 与 rmdir 区别
目录 背景 二者区别 rmdir rm -r rm -rf 测试过程 配置环境 rmdir rm -r rm -rf 参考资料 背景 今天学弟在使用 NVMe-over-TCP 时发现无法卸载 nvm ...
- 【渗透测试】Vulnhub EMPIRE BREAKOUT
渗透环境 攻击机: IP: 192.168.149.128(Kali) 靶机: IP:192.168.149.130 靶机下载地址:https://www.vulnhub.com/entr ...
- SQL Server关于AlwaysOn的理解-读写分离的误区(一)
前言 很多人认为AlwaysOn在同步提交模式下数据是实时同步的,也就是说在主副本写入数据后可以在辅助副本立即查询到.因此期望实现一个彻底的读写分离策略,即所有的写语句在主副本上,所有的只读语句分离到 ...
- mpi转以太网连接300PLC在气动系统中的应用
mpi转以太网连接300PLC在气动系统中的应用 某企业装备有限公司 摘要 工业通讯迅速发展的今天,MPI转以太网通讯已经发展为成熟,稳定,高效通讯 方式,兴达易控自主研发的MPI转以太网模块MPI- ...
- Python基础——字符编码、文件处理
文章目录 字符编码 一 引入 二 知识储备 2.1 三大核心硬件 2.2 文本编辑器读取文件内容的流程 2.3 python解释器执行文件的流程 2.4 总结 三.字符编码介绍 3.1 什么是字符编码 ...
- go语言 包依赖管理-构建完整的依赖项目:目录结构及包的调用
目录结构: <home>/ |-- greetings/ |-- hello/1.分别进入对应目录创建以上目录结构 //bash切换到用户主目录 cd $HOMEPAHT$ //bash新 ...
- 计算机三级网络技术备考复习资料zhuan
计算机三级网络技术备考复习资料 第一章 计算机基础 分析:考试形式:选择题和填空题,6个的选择题和2个填空题共10分,都是基本概念 1.计算机的四特点:有信息处理的特性,有广泛适应的特性,有 ...
- 【Unity3D】水面特效
1 前言 水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节.Shader Graph 基础知识详见→Shader Graph简 ...
- [ABC204E] Rush Hour 2 题解
Rush Hour 2 题目大意 给定一张无向图,边带两个参数 \(c_i,d_i\),在 \(t\) 时间时经过第 \(i\) 条边所需的时间是 \(c_i+\lfloor\frac{d_i}{t+ ...
- Qt OpenGL textures详解
1. 初始化opengl资源 Q_INIT_RESOURCE:textures(资源名称) QSurfaceFormat:定义3d面显示方式 如果在vs+qt vs tools 中无法正常显示3d图形 ...