题目描述

有 \(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] 讨论的更多相关文章

  1. NOI Online 提高组 题解

    来补坑了-- 个人认为三道题难度差不多-- 还有要说一嘴,为啥我在其他网站代码都好好的,复制到 cnblogs 上 Tab 就成 8 空格了?不过也懒得改了. T1 序列 首先,遇到这种加一减一还带附 ...

  2. [NOI Online 提高组]冒泡排序

    题目 洛谷等许多 \(OJ\) 都有 思路 考试题,今日无意又做了一次 然后发现自己读错题了······ 其实询问时只要 \(k\) 轮排序后的逆序对个数并不需要真的对序列进行更改 很显然 \(k\) ...

  3. NOI ONLINE 提高组 序列 根据性质建图

    题目链接 https://www.luogu.com.cn/problem/P6185 题意 应该不难懂,跳过 分析 说实话第一眼看到这题的时候我有点懵,真不知道怎么做,不过一看数据,还好还好,暴力能 ...

  4. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  5. 洛谷P2409 Y的积木

    P2409 Y的积木 77通过 491提交 题目提供者zhouyonglong 标签云端评测 难度普及+/提高 提交  讨论  题解 最新讨论 这组数据几乎可以卡掉所有程- 第一个题解有点问题 求教大 ...

  6. 洛谷P3379 【模板】最近公共祖先(LCA)

    P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...

  7. 洛谷P3372 【模板】线段树 1

    P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...

  8. 洛谷P3368 【模板】树状数组 2

    P3368 [模板]树状数组 2 102通过 206提交 题目提供者HansBug 标签 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 如题,已知一个数列,你需要进行下面两 ...

  9. 洛谷P3374 【模板】树状数组 1

    P3374 [模板]树状数组 1 140通过 232提交 题目提供者HansBug 标签 难度普及/提高- 提交  讨论  题解 最新讨论 题目描述有误 题目描述 如题,已知一个数列,你需要进行下面两 ...

  10. 洛谷P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交  讨论  题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...

随机推荐

  1. 微服务集成RabbitMq保姆级教程

    本文通过简单的示例代码和说明,让读者能够了解微服务如何集成RabbitMq 之前的教程 https://www.cnblogs.com/leafstar/p/17641358.html 在这里我将介绍 ...

  2. Pandas 使用教程 Series、DataFrame

    目录 Series (一维数据) 指定索引值 使用 key/value 对象,创建对象 设置 Series 名称参数 DataFrame(二维数据) 使用字典(key/value)创建 loc 属性返 ...

  3. CI框架的base_url localhost [::1]等问题

    为什么localhost变成了[::1] [::1]是IP6的地址, 与localhost等价 使用base_url后, 加载不了样式 ci框架需要定义base_url, 未定义就会出现返回local ...

  4. KRPANO资源分析工具下载720YUN全景图

    提示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师 ...

  5. 后端常用的Linux命令大全,建议收藏

    引言 作为一名后端工程师,使用终端是一种常见的做法,也是你应该学习的技能.许多命令和实用程序可以帮助你在使用 Linux 时更有效地完成任务. 基本 Linux 命令 如果你想使用 Linux 操作系 ...

  6. 20230919 .NET面经

    SQL IQuerable 和 IEnumerable 的主要区别? https://stackoverflow.com/questions/252785/what-is-the-difference ...

  7. Redis系列之——高级用法

    文章目录 一 慢查询 1.1 生命周期 1.2 两个配置 1.2.1 slowlog-max-len 1.2.2 slowlog-max-len 1.2.3 配置方法 1.3 三个命令 1.4 经验 ...

  8. pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

    pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simpleLooking in indexes: https://pypi.tuna.t ...

  9. poe不能用了poe.com收费了

    Anthropic's fastest model, with strength in creative tasks. Features a context window of 9k tokens ( ...

  10. Travelling Salesman and Special Numbers

    prologue 模拟赛的一道题,结果没做出来,丢大人,败大兴.所以过来糊一篇题解. analysis 我们看到数据范围这么大,那么肯定不可以一个一个遍历(废话),所以就要考虑这个题目的性质. 我们先 ...