【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队
【BZOJ4810】[Ynoi2017]由乃的玉米田
Description
Input
Output
Sample Input
1 1 2 3 4
2 1 1 2
1 1 2 2
3 1 1 1
3 5 5 16
1 2 3 4
Sample Output
yumi
yuno
yuno
yumi
题解:区间询问当然是用莫队来水啊~
对于差为x,直接在bitset上搞就行了;对于和为x,我们维护一个翻转的bitset,然后转化成差为x的问题来搞;对于乘积为x,我们直接开个桶,用sqrt(x)的复杂度枚举x的约数就行了。
小号交题一次提交顺利成为status倒数第一,大号提交先TLE了两次,然后加了一堆优化后顺利成为status倒数第二,试问还有谁~~~所以千万不要拿我的代码当做标程来拍。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <bitset>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn=100010;
bitset<maxn*2> b1,b2;
int n,m,B;
int v[maxn],st[maxn*2],ans[maxn];
struct QUERY
{
int qa,qb,qk,qx,org;
}q[maxn];
bool cmp(QUERY a,QUERY b)
{
return (a.qa/B==b.qa/B)?(a.qb<b.qb):(a.qa/B<b.qa/B);
}
void ins(int x)
{
if(!st[x]) b1[x]=b2[100000-x]=1;
st[x]++;
}
void del(int x)
{
st[x]--;
if(!st[x]) b1[x]=b2[100000-x]=0;
}
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd();
B=(int)sqrt((double)n);
int i,j,l=1,r=0;
for(i=1;i<=n;i++) v[i]=rd();
for(i=1;i<=m;i++) q[i].qk=rd(),q[i].qa=rd(),q[i].qb=rd(),q[i].qx=rd(),q[i].org=i;
sort(q+1,q+m+1,cmp);
for(i=1;i<=m;i++)
{
while(l>q[i].qa) ins(v[--l]);
while(r<q[i].qb) ins(v[++r]);
while(l<q[i].qa) del(v[l++]);
while(r>q[i].qb) del(v[r--]);
if(q[i].qk==1) ans[q[i].org]=((b1<<q[i].qx)&b1).any();
if(q[i].qk==2) ans[q[i].org]=((b1<<100000)&(b2<<q[i].qx)).any();
if(q[i].qk==3) for(j=1;j*j<=q[i].qx&&!ans[q[i].org];j++) if(q[i].qx%j==0&&st[j]&&st[q[i].qx/j]) ans[q[i].org]=1;
}
for(i=1;i<=m;i++)
{
if(ans[i]) printf("yuno\n");
else printf("yumi\n");
}
return 0;
}
【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队的更多相关文章
- BZOJ4810 Ynoi2017由乃的玉米田(莫队+bitset)
多组询问不强制在线,那么考虑莫队.bitset维护当前区间出现了哪些数,数组记录每个数的出现次数以维护bitset.对于乘法,显然应有一个根号范围内的因子,暴力枚举即可.对于减法,a[i]-a[j]= ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田 ——Bitset 莫队算法
加法和减法的操作都能想到Bitset. 然后发现乘法比较难办,反正复杂度已经是$O(n\log{n})$了 枚举因数也不能更差了,直接枚举就好了. #include <map> #incl ...
- bzoj4810 [Ynoi2017]由乃的玉米田 bitset优化+暴力+莫队
[Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 917 Solved: 447[Submit][Status][Di ...
- 【BZOJ4810】[YNOI2017] 由乃的玉米田(莫队+bitset)
点此看题面 大致题意: 给你一段序列,每次询问一段区间内是否存在两个数的差或和或积为\(x\). 莫队算法 看到区间询问+可以离线,首先想到了莫队啊. 但是,在较短的时间内更新信息依然比较难以实现. ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4810 [题目大意] 给出一个数列,有三种区间查询, 分别查询区间是否存在两个数乘积为x ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田 (莫队 + bitset)
题目链接 BZOJ 4810 首先对询问离线, 莫队算法处理. 首先我们可以用bitset维护处当前区间中是否存在某个数. 对于询问1, 我们可以用 ((f >> q[i].x) &am ...
- bzoj 4810 由乃的玉米田 - bitset - 莫队算法
由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序列a,长度为n,有m ...
- LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...
- BZOJ4810:[YNOI2017]由乃的玉米田(莫队,bitset)
Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一 ...
随机推荐
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面如何设置页面跳转
TC3中,可以点击某个按钮,改变所显示的视图,然后从你写好的页面中选择一个要跳过去的页面 当然,在跳过去的页面上再做一个按钮可以跳回主页面也是必须的 更多教学视频和资料下载,欢迎关注以下信 ...
- axios 取消请求
解决思路 在发送第二次请求的时候如果第一次请求还未返回,则取消第一次请求,以保证后发送的请求返回的数据不会被先发送的请求覆盖. axios官方文档取消请求说明 方法一: const CancelTok ...
- 【DB2】经典SQL写法
1.环境准备 CREATE TABLE DataInfo( ID_1 ), ID_2 ) ) INSERT INTO DataInfo VALUES('A','Oracle'); INSERT INT ...
- android 静态和动态设置 Receiver的 android:enabled值
0x 01 前提约束: 0x001 静态检查:指用action限定Intent,并使用包管理器的queryBroadCastReceivers方法,在flags字段置为0时查找ResolveInfo, ...
- 在连接mysql数据库时出错:The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone
这个错误是时区导致的,所以需要在配置连接url后面加上时区: url=jdbc:mysql://localhost:3309/test?serverTimezone=UTC 其中UTC是统一标准世界时 ...
- linux 系统下MySQL5.7重置root密码(完整版,含ERROR 1820 (HY000)解决方案)
mysql的root密码忘记了怎么重置? 往下看: 1.保证你的mysql服务处于关闭状态.(用ps -ef | grep mysql 查看进程,有则kill -9 进程号) 2.在my.cnf所在目 ...
- PHP正则表达式教程
1.入门简介 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windo ...
- ubuntu 12.04 install gcc 4.8
http://askubuntu.com/questions/271388/how-to-install-gcc-4-8-in-ubuntu-12-04-from-the-terminal sudo ...
- Win7安装.Net framework 3.5时出错的某解决办法
情况: Win7卸载了.Net Framework 3.5后, 做了些盘符的Symlink操作, 将一些大文件从C盘移到D盘. 再次安装.Net 3.5时, 怎么都装不上, 直接下载离线安装包, 一装 ...
- cf #363 d
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output stan ...