洛谷 P3674 小清新人渣的本愿 [莫队 bitset]
题意:
给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3
题面太强啦!!!
感觉就是莫队,想了一下分块不好搞更坚定了莫队的信念
$a-b=x$,$a=x+b$,放在权值数组上就是b右移x位,$bitset$大法好
加法同理
乘法,总共就$\sqrt{N}$个约数....
感觉复杂度$O(\frac{N^2}{64} + N\sqrt{N})$不靠谱结果竟然A了...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <bitset>
using namespace std;
typedef long long ll;
const int N=1e5+, M=2e5+;
inline ll read(){
char c=getchar();ll x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
} int n, Q, a[N], op, l, r, x; int block, m, pos[N];
struct meow{
int l, r, x, type, qid;
bool operator <(const meow &a) const {return pos[l]==pos[a.l] ? r<a.r : pos[l]<pos[a.l];}
}q[N];
int ans[N]; struct Meow{
bitset<M> a, b, c;
int cou[N];
inline void add(int v) {
cou[v]++;
if(cou[v]==) a[v]=, b[v+N]=, c[-v+N]=;
}
inline void del(int v) {
cou[v]--;
if(cou[v]==) a[v]=, b[v+N]=, c[-v+N]=;
} int Que(int type, int x) { //printf("Que %d %d\n",type,x);
int ans=;
if(type==) {
if( (a & (a<<x)).any() ) ans=;
}else if(type==) {
if( (b & (c<<x)).any() ) ans=;
}else {
int m=sqrt(x);
for(int i=; i<=m; i++) if(x%i == )
if(cou[i] && cou[x/i]) {ans=; break;}
}
return ans;
}
}A;
void modui(){
int l=, r=;
for(int i=; i<=Q; i++){
while(r<q[i].r) r++, A.add(a[r]);
while(r>q[i].r) A.del(a[r]), r--;
while(l<q[i].l) A.del(a[l]), l++;
while(l>q[i].l) l--, A.add(a[l]); ans[q[i].qid]= A.Que(q[i].type, q[i].x);
}
}
int main(){
// freopen("in","r",stdin);
n=read(); Q=read();
block=sqrt(n); m=(n-)/block+;
for(int i=; i<=n; i++) a[i]=read(), pos[i]=(i-)/block+;
for(int i=; i<=Q; i++)
op=read(), l=read(), r=read(), x=read(), q[i]=(meow){l, r, x, op, i};
sort(q+, q++Q);
modui();
for(int i=; i<=Q; i++) puts(ans[i] ? "hana" : "bi");
}
洛谷 P3674 小清新人渣的本愿 [莫队 bitset]的更多相关文章
- P3674 小清新人渣的本愿 莫队+bitset
ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ...
- 洛谷P3674 小清新人渣的本愿
题意:多次询问,区间内是否存在两个数,使得它们的和为x,差为x,积为x. n,m,V <= 100000 解: 毒瘤bitset...... 假如我们有询问区间的一个桶,那么我们就可以做到O(n ...
- 洛谷P3674 小清新人渣的本愿(莫队)
传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2 ...
- 洛谷 P3674 小清新人渣的本愿
想看题目的戳我. 我刚开始觉得这道题目好难. 直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了. 想知道这个神奇的bitset的戳我. 这个题目一看就感觉是莫队 ...
- P3674 小清新人渣的本愿
P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...
- Bzoj2038/洛谷P1494 小Z的袜子(莫队)
题面 Bzoj 洛谷 题解 考虑莫队算法,首先对询问进行分块(分块大小为\(sqrt(n)\)),对于同一个块内的询问,按照左端点为第一关键字,右端点为第二关键字排序.我们统计这个区间内相同的颜色有多 ...
- 洛谷2709 小B的询问(莫队)
题面 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R] ...
- 【题解】Luogu P3674 小清新人渣的本愿
原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作 ...
- luogu P3674 小清新人渣的本愿
传送门 毒瘤lxl 本质是莫队,关键是怎么处理询问 这里需要开两个bitset(记为\(b1,b2\)),分别存\(x\)和\(n-x\)是否出现 对于询问1,即\(x-y=z\),由于\(y=x-z ...
随机推荐
- use ambiguous的错误——编译错误
出现这样的问题是因为namespace std里面已经有一个count了,而 using namespace std;语句把该namespace 打开了,这导致了后面的引用不明确: 不过这里也可以把u ...
- 简单的面向对象(OO)练习
学生设备管理系统: 每个学校都有很多班级,每个班级都有很多设备.(设备可以更新)每个设备都有购买价格,每种设备都有折旧率(如每年折旧10%) 按班级进行统计,指定的班级有多少的设数量? 按班级进行统计 ...
- 01-01_环境准备_pyenv
本文重点: 了解pyenv pyenv下载及安装 pyenv 使用 安装ipython 一.了解pyenv 经常遇到这样的情况: 系统自带的 Python 是 2.6,自己需要 Python 2.7 ...
- [国嵌攻略][155][I2C用户态驱动设计]
用户态驱动模型 用户态驱动模型首先是一个应用程序,其次是在这个用户程序中通过内核调用来驱动设备. IIC通用驱动代码 IIC通用驱动程序的代码在/drivers/i2c/i2c-dev.c中.一次读操 ...
- C#采用rabbitMQ搭建分布式日志系统
网上对于java有很多开源的组件可以搭建分布式日志系统,我参考一些组件自己开发一套简单的分布式日志系 全部使用采用.NET进行开发,所用技术:MVC.EF.RabbitMq.MySql.Autofac ...
- 如何看apache的版本号
在服务器上输入httpd -v就可以看到 在服务器上运行apachectl -v命令即可 Server version: Apache/2.2.3 Server built: Feb 25 2012 ...
- Jmeter下载时Binaries和Source两类包的区别
在下载Jmeter时,存在两种类型的下载包,分别为Binaries和Source: 一般开放原代码软件都会有两个版本发布: Source Distribution 和 Binary Distribut ...
- 图表工具--- ECharts.js学习(一) 简单入门
ECharts.js学习(一) 在项目开发的时候,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库.具体有哪几种可以看: 前端开发者常用的9个JavaScript图表库 EChar ...
- python_继承supper错误
问题: qs = super(BnnerCourseAdmin, self).queryset() TypeError: super(type, obj): obj must be an instan ...
- TDD最佳实践
这里就先目前阶段,整理一份TDD的最佳实践,在之后的Xunit测试整理中,这份实践会越来越长,对于这份核心在写测试的时候应该时刻注意. 1,在软件开发领域中,从来没有这样的事情:少数的几行代码对大量的 ...