给个链接:集合

很神秘的题目。基本上看到之后就可以想到哈希。

首先想到一个比较神秘的暴力。就是对于每个询问,扫一遍所有 \(a\) 中的数出现的位置,把它弄成一个哈希值(具体怎么弄随意)存到 set 里,然后看看是不是和 \(b\) 中的数出现的位置这样操作后的集合完全相等。事实上就是判断是否对于所有在 \(a\) 中这个区间内出现的数 \(x\),都存在一个在 \(b\) 中出现的不同的数 \(y\),使得 \(x,y\) 出现的位置完全相同。这样做应该是有 \(70\) 分的,但是显然不够。

然后我们考虑一个事情,对于每一个 \(i\),\([i,j]\) 这个区间合法在 \(j\) 尽可能小的时候最有可能成立。换句话说有单调性,可以二分。

但是,二分是没有必要的,我们可以用双指针做的更好。因为,如果 \([i,j]\) 合法,\([i+1,j]\) 存在,那么 \([i+1,j]\) 合法。

所以我们对每个 \(i\) 找出最靠右的 \(j\) 且满足 \([i,j]\) 合法,然后就可以 \(O(1)\) 回答询问。时间复杂度 \(O(n+q)\)。

这里为了保险,把每个位置的值也做了哈希,用 \(p_i\) 存储。

给个代码:

#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define N 600005
using namespace std;
int n,m,q,a[N][3],b[N][3];
ull nowa[N],nowb[N],suma,sumb,p[N];
int ri[N];//使[i,j]合法的最靠右的j
ull get_rnd(ull x){
return x*x*x;//随便变换一下
}
void work(int id,int type){
for(int j=0;j<3;j++){
ull i=a[id][j];
suma-=get_rnd(nowa[i]);//把原来的值减掉
nowa[i]+=type*p[id];//看情况加上或减去这个位置的哈希值
suma+=get_rnd(nowa[i]);//加上现在的值
}
for(int j=0;j<3;j++){//这里同理
ull i=b[id][j];
sumb-=get_rnd(nowb[i]);
nowb[i]+=type*p[id];
sumb+=get_rnd(nowb[i]);
}
}
signed main(){
srand(time(0));
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
for(int j=0;j<3;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<3;j++){
cin>>b[i][j];
}
}
for(int i=1;i<=n;i++){
ri[i]=n;
}
for(int i=1;i<=n;i++){
p[i]=rand()*rand()+923;
}
work(1,1);
for(int i=1,j=1;i<=n;i++){
while(j<=n&&suma==sumb){//如果当前仍然合法
j++;
if(j>n)break;
work(j,1);
}
ri[i]=min(ri[i],j-1);
work(i,-1);//i要右移,所以撤掉这一位的贡献
}
while(q--){
int l,r;
cin>>l>>r;
cout<<(ri[l]>=r?"Yes\n":"No\n");
}
return 0;
}

NOI2024 集合 题解的更多相关文章

  1. 牛客编程巅峰赛S1第11场 - 黄金&钻石 B.新集合 (DFS)

    题意:有\([1,n]\)这\(n\)个数,构造集合,集合中不能包含\(u\)和\(v\),问最多能构造多少个集合. 题解:被这题卡了一整场.....以为是推公式,结果答案是暴搜? ​ 首先我们先用一 ...

  2. [bzoj 3226]校门外的区间

    题意 输出最后的集合   题解 校门外的树会做吧 区间知道是什么东西吧 校门外的区间会做了吧 昨天做个大线段树没做出来,今天做个小线段树压压惊 py一下输入数据,然后操作变成: U 区间涂1 I 两侧 ...

  3. POJ1112 Team Them Up!

    Team them up! Input file teams.in Output file teams.out Your task is to divide a number of persons i ...

  4. poj-2524 ubiquitous religions(并查集)

    Time limit5000 ms Memory limit65536 kB There are so many different religions in the world today that ...

  5. 牛客多校Round 5

    Solved:3 rank:195 F. take 官方题解:小 A 在打开第 i 个箱子后会交换手中的钻石和第 i 个箱子中的钻石 当且仅当第 i个箱子的钻石是前 i 个箱子打开后出现的所有钻石里最 ...

  6. 「HNOI2015」亚瑟王

    传送门 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟 ...

  7. AtCoder Beginner Contest 177 D - Friends (并查集)

    题意:有\(n\)个人,给你\(m\)对朋友关系,朋友的朋友也是朋友,现在你想要将他们拆散放到不同的集合中,且每个集合中的人没有任何一对朋友关系,问最少需要多少集合. 题解:首先用并查集将朋友关系维护 ...

  8. bzoj2839 集合计数 组合计数 容斥原理|题解

    集合计数 题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007.(是 ...

  9. 【题解】LOJ2462完美的集合(树DP 魔改Lucas)

    [题解]LOJ2462完美的集合(树DP 魔改Lucas) 省选模拟考这个??????????????????? 题目大意: 有一棵树,每个点有两个属性,一个是重量\(w_i\)一个是价值\(v_i\ ...

  10. 集合删数 (vijos 1545) 题解

    [问题描述] 一个集合有如下元素:1是集合元素:若P是集合的元素,则2 * P +1,4*P+5也是集合的元素,取出此集合中最小的K个元素,按从小到大的顺序组合成一个多位数,现要求从中删除M个数位上的 ...

随机推荐

  1. YUM退役了?DNF本地源配置

    客户遇到在OEL8安装Oracle缺包问题,使用dnf安装也没有,甚至连oracle-database-preinstall-21c都装不上.本质是DNF配置问题. 早期为了解决这类问题,专门写过很多 ...

  2. 在Xcode编写我们的quick help

    程序环境 Xcode 13.2.1 "写代码要经常写注释."虽然很多人不以为然,但是在使用Xcode的时候,我们在写注释的时候稍微注意一下格式的话,Xcode会给我们带来额外的正反 ...

  3. C#去除时间格式化之后中间的T字母

    需求是这样的, 前后端传参,然后后端序列化把字符串存在数据库. 然后发现时间类型的字段,序列化之后 ,有个字母T, DateTime dt = DateTime.Parse("2024-05 ...

  4. 复习 - es6语法

    这几天电脑有点问题,一直在弄,而且论文也逼近了也在时间弄那个 ,前面node有一个大项目,已经做完了,我现在是准备把上次复习断下的继续复习一直到这个项目,然后就开始vue了. 1. 首先是函数的一个进 ...

  5. 贝塞尔曲线原理、推导及Matlab实现

    贝塞尔曲线原理.推导及Matlab实现 贝塞尔曲线原理.推导及Matlab实现 一.简介 贝塞尔曲线提出 在数学的数值分析领域中,贝塞尔曲线(English:Bézier curve)是计算机图形学中 ...

  6. vue中的插槽详解

    插槽(slot)插槽在vue中是一种很常见的写法,让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式 一共有三种分类:默认插槽.具名插槽.作用域插槽,下面一一根据案例改造说明 1 ...

  7. P2P应用

    对等连接(peer to peer)文件分发的分析: 传统客户-服务器模式:用时与文件量成正比 P2P模式:随文件量增大而用时趋于一个极限. P2P工作方式有三: 集中式索引:客户访问服务器所需数据在 ...

  8. Loggie Geek Camp 火热启动,社区大神带你玩开源

    由开源构建的协作模式,正成为描绘数字蓝图.创造美好未来的主航道,中国工商银行.阿里云等组织已经在网易数帆"架构开发.内核开源"理念中与后者达成合作,来自华为.阿里云.中国移动.eB ...

  9. 如何在 XAMPP 中使用 不同的 PHP 版本?

    你有没有碰到这种情况,你工作的项目需要的是PHP8,而你自己的项目需要的是PHP7,而你又特别钟爱于XAMPP,奈何它却不能自由切换PHP版本,下面就讲下本人在用的方法将PHP7更新到PHP8,可以通 ...

  10. OnlyOffice 部署与使用

    Onlyoffice为office类文档预览支持服务,该服务需在Linux系统上运行,需要用Docker容器技术. 以下步骤皆在Linux系统中操作. 一.OnlyOffice部署 1.安装Docke ...