#莫队,bitset#洛谷 3674 小清新人渣的本愿
分析
只要做到\(O(n\sqrt{n})\)的时间复杂度就可以了
考虑莫队,首先乘号就是枚举\(x\)的约数\(d\),
判断\(d\)和\(\frac{x}{d}\)是否同时出现,
再考虑差,怎样优化暴力,考虑bitset,将其左移\(x\)位,
再与原bitset按位与,若有公共的1即为是
那和怎么办,\(a+b=x\)那不就是\(a-(-b)=x\)吗,把\(-b\)扔进bitset就可以了
由于bitset里不能放负数所以要下标整体左移\(n\)位
代码
#include <cstdio>
#include <cctype>
#include <bitset>
#include <algorithm>
#define rr register
using namespace std;
const int N=100011; bitset<N>uk,ku;
struct five{int opt,l,r,x,rk;}q[N];
int kuai[N],Sqrt[N],a[N],ans[N],n,Q,CNT[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
bool cmp(five a,five b){
if (kuai[a.l]^kuai[b.l]) return a.l<b.l;
if (kuai[a.r]^kuai[b.r]) return kuai[a.l]&1?a.r<b.r:a.r>b.r;
return (kuai[a.l]^kuai[a.r])&1?a.x<b.x:a.x>b.x;
}
inline void add(int now){if (++CNT[now]==1) uk[now]=ku[n-now]=1;}
inline void del(int now){if (--CNT[now]==0) uk[now]=ku[n-now]=0;}
signed main(){
n=iut(); Q=iut();
for (rr int i=1;i<317;++i) Sqrt[i*i]=i;
for (rr int i=1;i<N;++i) if (!Sqrt[i]) Sqrt[i]=Sqrt[i-1];
for (rr int i=1;i<=n;++i) a[i]=iut(),kuai[i]=(i-1)/Sqrt[(n+Q)>>1]+1;
for (rr int i=1;i<=Q;++i) q[i]=(five){iut(),iut(),iut(),iut(),i};
sort(q+1,q+1+Q,cmp);
for (rr int i=1,L=q[1].l,R=L-1;i<=Q;++i){
while (L>q[i].l) add(a[--L]);
while (L<q[i].l) del(a[L++]);
while (R>q[i].r) del(a[R--]);
while (R<q[i].r) add(a[++R]);
switch (q[i].opt){
case 1:ans[q[i].rk]=(uk&(uk<<q[i].x)).any(); break;
case 2:ans[q[i].rk]=(uk&(ku>>(n-q[i].x))).any(); break;
case 3:{
for (rr int j=1;j<=Sqrt[q[i].x];++j)
if (q[i].x%j==0&&uk[j]&&uk[q[i].x/j]){
ans[q[i].rk]=1; break;
}
break;
}
}
}
for (rr int i=1;i<=Q;++i)
if (ans[i]) printf("hana\n");
else printf("bi\n");
return 0;
}
#莫队,bitset#洛谷 3674 小清新人渣的本愿的更多相关文章
- 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]
传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...
- 洛谷P3674 小清新人渣的本愿(莫队)
传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2 ...
- 洛谷P3674 小清新人渣的本愿
题意:多次询问,区间内是否存在两个数,使得它们的和为x,差为x,积为x. n,m,V <= 100000 解: 毒瘤bitset...... 假如我们有询问区间的一个桶,那么我们就可以做到O(n ...
- 洛谷 P3674 小清新人渣的本愿
想看题目的戳我. 我刚开始觉得这道题目好难. 直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了. 想知道这个神奇的bitset的戳我. 这个题目一看就感觉是莫队 ...
- [Luogu 3674]小清新人渣的本愿
Description 题库链接 给你一个序列 \(A\) ,长度为 \(n\) ,有 \(m\) 次操作,每次询问一个区间是否可以 选出两个数它们的差为 \(x\) : 选出两个数它们的和为 \(x ...
- 【洛谷3674】小清新人渣的本愿(莫队,bitset)
[洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\s ...
- P3674 小清新人渣的本愿
P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...
- LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...
- P3674 小清新人渣的本愿 莫队+bitset
ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ...
- 【洛谷 P3674】 小清新人渣的本愿(bitset,莫队)
题目链接 因为每个数都是\(10^5\)以内,考虑直接用\(bitset\)维护. \(a-b=x\),其实就是看是否有\(p\)和\(p+x\)同时存在,直接\(bitset\)移位按位与一下就好了 ...
随机推荐
- 细聊ASP.NET Core WebAPI格式化程序
前言 我们在使用ASP.NET Core WebApi时它支持使用指定的输入和输出格式来交换数据.输入数据靠模型绑定的机制处理,输出数据则需要用格式化的方式进行处理.ASP.NET Core框架已经内 ...
- EasyExcel使用及自定义设置单元格样式
EasyExcel使用及自定义设置单元格样式 https://www.cnblogs.com/Hizy/p/11825886.html easyexcel 自动设置列宽 https://www.man ...
- RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、文件传输、安装vscode和samba共享服务
前言 开始搭建RK3568的基础虚拟机,具备基本的通用功能,主要包含了串口工具minicom,远程登陆ssh,远程传输filezilla,代码编辑工具vscode. 虚拟机 文档对对虚拟机 ...
- Java JVM——4.程序计数器
简介 JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行. 这 ...
- day05---系统的重要文件(2)
回顾 /etc/sysconfig/network-scripts/ifcfg-eth0 网卡配置文件 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=et ...
- 【Azure Cloud Service】Cloud Service(Classic) 迁移失败,找不到解决方案怎么办?
问题描述 很老很老的云服务,在迁移到 Cloud Service(Extended Support)[云服务外延支持] 时,迁移的验证步骤不通过,因为资源中没有包含虚拟网络(Virtual Netwo ...
- 四种色彩模式ARGB_8888、ARGB_4444、 RGB_565、 ALPHA_8
A:透明度. R:红色. G:绿色. B:蓝色. Bitmap.Config ARGB_8888:有四个8位组成,A,R,G,B各占八位,也就是各占一个字节.也就是一个像素点占4个字节,32位. Bi ...
- STL-RBTree模拟实现
#pragma once #include<assert.h> #include<iostream> using std::cout; using std::endl; usi ...
- 【夏令时】用@JsonFormat(pattern = “yyyy-MM-dd“)注解,出生日期竟然年轻了一天
前言 缘由 用@JsonFormat(pattern = "yyyy-MM-dd")注解,出生日期竟然年轻了一天 艺术源于生活,bug源于开发. 起因是艰苦奋战一个月,测试及验收都 ...
- C# 操作国产数据库之【 人大金仓 】之四大模式
人大金仓优点 人大金仓是国产最主流ORM之一 具有和PgSql一样强悍的性能,同时人大金仓支持了四种数据库模式 : Oracle.PgSql.MySql和SqlServer ,假如你们系统有多种数据库 ...