#bitset优化,莫队#洛谷 5355 [Ynoi2017] 由乃的玉米田
分析
只针对除法而言,如果商很大直接用bitset判断是否存在,
否则直接预处理最近的答案判断是否在区间内即可,注意0要特判
代码
#include <cstdio>
#include <cctype>
#include <bitset>
#include <algorithm>
#define rr register
using namespace std;
const int N=100011,base=316; bitset<N>uk,ku;
struct five{int opt,l,r,x,rk,Is;}q[N];
int kuai[N],Sqrt[N],a[N],ans[N],m,n,Q,CNT[N],last[N],mx[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 (a.Is&&b.Is) return a.x>b.x;
if (a.Is||b.Is) return b.Is;
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 signed max(int a,int b){return a>b?a:b;}
inline void add(int now){if (++CNT[now]==1) uk[now]=ku[N-now-1]=1;}
inline void del(int now){if (--CNT[now]==0) uk[now]=ku[N-now-1]=0;}
signed main(){
n=iut(); Q=iut();
for (rr int i=1;i<=base;++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)/base+1;
for (rr int i=1;i<=Q;++i) q[i]=(five){iut(),iut(),iut(),iut(),i,0},q[i].Is=q[i].opt==4&&q[i].x<=base;
sort(q+1,q+1+Q,cmp),m=Q; for (;m&&q[m].Is;--m);
for (rr int l=m+1,r;l<=Q;l=r+1){
for (r=l;r<=Q&&q[r].x==q[l].x;++r); --r;
if (!q[l].x){
for (rr int i=1,now=0;i<=n;++i){
if (!a[i]) now=i;
mx[i]=now;
}
for (rr int i=l;i<=r;++i){
if (q[i].l==q[i].r) continue;
if (q[i].l<=mx[q[i].r])
ans[q[i].rk]=1;
}
continue;
}
for (rr int i=0;i<N;++i) last[i]=0;
for (rr int i=1,now=0;i<=n;++i){
last[a[i]]=i;
if (a[i]*q[l].x<N) now=max(now,last[a[i]*q[l].x]);
if (a[i]%q[l].x==0) now=max(now,last[a[i]/q[l].x]);
mx[i]=now;
}
for (rr int i=l;i<=r;++i)
if (q[i].l<=mx[q[i].r])
ans[q[i].rk]=1;
}
for (rr int i=1,L=q[1].l,R=L-1;i<=m;++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-1))).any(); break;
case 3:{
if (!q[i].x&&uk[q[i].x]) {ans[q[i].rk]=1; break;}
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;
}
case 4:{
rr int t=(N-1)/q[i].x;
for (rr int j=1;j<=t;++j)
if (uk[j]&&uk[j*q[i].x]){
ans[q[i].rk]=1; break;
}
break;
}
}
}
for (rr int i=1;i<=Q;++i)
if (ans[i]) printf("yuno\n");
else printf("yumi\n");
return 0;
}
#bitset优化,莫队#洛谷 5355 [Ynoi2017] 由乃的玉米田的更多相关文章
- 洛谷P4135 Ynoi2016 掉进兔子洞 (带权bitset?/bitset优化莫队 模板) 题解
题面. 看到这道题,我第一反应就是莫队. 我甚至也猜出了把所有询问的三个区间压到一起处理然后分别计算对应询问答案. 但是,这么复杂的贡献用什么东西存?难道要开一个数组 query_appear_tim ...
- 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...
- 普通莫队--洛谷P1997 【faebdc的烦恼】
离散化+莫队 cnt数组表示某个颜色出现的次数 sum数组表示某个数量出现的颜色种类 其它细节问题就按照莫队的模板来的 #include<cstdio> #include<algor ...
- 洛谷 P3287 - [SCOI2014]方伯伯的玉米田(BIT 优化 DP)
洛谷题面传送门 怎么题解区全是 2log 的做法/jk,这里提供一种 1log 并且代码更短(bushi)的做法. 首先考虑对于一个序列 \(a\) 怎样计算将其变成单调不降的最小代价.对于这类涉及区 ...
- Machine Learning Codeforces - 940F(带修莫队) && 洛谷P4074 [WC2013]糖果公园
以下内容未验证,有错请指正... 设块大小为T,则块数为$\frac{n}{T}$ 将询问分为$(\frac{n}{T})^2$块(按照左端点所在块和右端点所在块分块),同块内按时间从小到大依次处理 ...
- 洛谷P3287 [SCOI2014]方伯伯的玉米田(树状数组)
传送门 首先要发现,每一次选择拔高的区间都必须包含最右边的端点 为什么呢?因为如果拔高了一段区间,那么这段区间对于它的左边是更优的,对它的右边会更劣,所以我们每一次选的区间都得包含最右边的端点 我们枚 ...
- bzoj4810 [Ynoi2017]由乃的玉米田 bitset优化+暴力+莫队
[Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 917 Solved: 447[Submit][Status][Di ...
- 【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队
[BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所 ...
- LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...
- 【洛谷 P3674】 小清新人渣的本愿(bitset,莫队)
题目链接 因为每个数都是\(10^5\)以内,考虑直接用\(bitset\)维护. \(a-b=x\),其实就是看是否有\(p\)和\(p+x\)同时存在,直接\(bitset\)移位按位与一下就好了 ...
随机推荐
- Notepad++设置删除当前行快捷键
Notepad++默认能实现"删除当前行"效果的快捷键是Ctrl + L,实际上这不并是真正意义上的删除当前行,而是剪切当前行. 而Eclipse中实现删除当前行的快捷键是:Ctr ...
- Array.forEach() 与 Array.map()这些方法的第三个可选参数 array 的作用
说明 let thisArray = [] thisArray.forEach((item, index, array)=>{ //为什么要有array,而不是直接用thisArray? }) ...
- 【Azure 服务总线】使用Azure Service Bus 时,出现证书错误: 所使用的证书具有无法验证的信任链
问题描述 在Azure中连接 Service Bus 服务发送消息时发生证书错误,抛出证书异常消息: 或 The X.509 certificate CN=servicebus.chinaclouda ...
- 【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
问题描述 通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?在一个企业的账号中,同一个组织有一个相同的 ...
- Python面向对象之多态和鸭子类型
[一]多态 [1]什么是多态 多态指的是一类事物有多种形态 [2]示例 比如动物有多种形态:猫.狗.猪 import abc class Animal(metaclass=abc.ABCMeta): ...
- 适用于AbpBoilerplate的RocketChat Api库
RocketChat 适用于AbpBoilerplate的RocketChat Api库 Rocket.Chat 是一个免费.开源.可扩展.高度可定制且安全的平台,可让您与团队进行交流和协作.共享文件 ...
- PV的回收策略、访问策略和状态
PersistentVolume(PV)的回收策略.访问策略和状态是Kubernetes存储管理中的重要概念. 回收策略 Retain:当PV的回收策略设置为Retain时,即使对应的Persiste ...
- 脑电测量ADS1299芯片调试总结
问题一:读出来ID不对? 笔者经过查阅官网资料和测试,发现这个一般是上电或者启动次序不对引起的. 特别是上电次序不同会导致这类问题. 问题二:内部时钟和外部时钟的选择是什么? 就拿内部时钟来说吧,首先 ...
- Python实践:基于Matplotlib实现某产品全年销量数据可视化
本文分享自华为云社区<画图实战-Python实现某产品全年销量数据多种样式可视化>,作者:虫无涯. 学习心得 有时候我们需要对某些数据进行分析,得到一些可视化效果图,而这些效果图可以直观展 ...
- python基础七(函数名称空间及作用域、函数对象、函数嵌套、闭包函数、装饰器)
一 名称空间(namespaces):存放名字的地方,是对栈区的划分. 有了名称空间之后,就可以在栈区中存放相同的名字,详细的名称空间.分三种1.1 内建名称空间存放的名字:存放的python解释器内 ...