题目描述

有 \(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. Avalonia 实现聊天消息渲染、图文混排(支持Windows、Linux、信创国产OS)

       在实现即时通讯软件或聊天软件时,渲染文字表情.图文混排是一项非常繁琐的工作,再加上还要支持GIF动图.引用消息.撤回消息.名片等不同样式的消息渲染时,就更加麻烦了. 好在我们可以使用 ESFra ...

  2. 修改DataTable中的值

    DataTable dt ;for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; row.BeginEdit() ...

  3. 动态规划二 & 贪心算法 实验三

    一.贪心算法和动态规划法解决背包问题. 有一个背包其容积 C = 13.现有表格内的物品可以购买. 商品 价格 P 体积 V 啤酒 24 10 汽水 2 3 饼干 9 4 面包 10 5 牛奶 9 4 ...

  4. Spring Boot中自动装配机制的原理

    SpringBoot中自动装配机制的原理 1.自动装配,简单来说就是自动把第三方组件的Bean装载到Spring IOC容器里面,不需要开发人员再去写Bean的装配配置, 2.在Spring Boot ...

  5. HTML一键打包APK工具 如何进行实名认证购买和激活

    HTML一键打包APK工具 价格表 授权时长 价格 1小时 49 1天 99 1个月 199 1个季度 399 半年 599 1年 799 付费版功能 功能点 免费版 付费版 去除广告信息 × √ 去 ...

  6. java正则表达式过滤工具类

    正则表达式过滤工具类 import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @Description : * @D ...

  7. 【.NET8】访问私有成员新姿势UnsafeAccessor(上)

    前言 前几天在.NET性能优化群里面,有群友聊到了.NET8新增的一个特性,这个类叫UnsafeAccessor,有很多群友都不知道这个特性是干嘛的,所以我就想写一篇文章来带大家了解一下这个特性. 其 ...

  8. Solution Set -「ARC 124」

    「ARC 124A」LR Constraints Link. 我们可以把 \(1\sim n\) 个盒子里能放的球的编号集合全部求出来.然后就直接来. 注意题目已经给出了 \(k\) 个球的位置,所以 ...

  9. Ds100p -「数据结构百题」41~50

    41.P3590 [POI2015]TRZ 给定一个长度为n的仅包含'B'.'C'.'S'三种字符的字符串,请找到最长的一段连续子串,使得这一段要么只有一种字符,要么有多种字符,但是没有任意两种字符出 ...

  10. ​Python爬虫IP代理池的建立和使用

    写在前面建立Python爬虫IP代理池可以提高爬虫的稳定性和效率,可以有效避免IP被封锁或限制访问等问题. 下面是建立Python爬虫IP代理池的详细步骤和代码实现: 1. 获取代理IP我们可以从一些 ...