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
yuno
yumi
yuno
yuno
yumi
正解:莫队算法+$bitset$。
这题坑点巨多,数据范围都没给全。。
我们考虑莫队算法,把询问排个序就行了。如何统计答案?如果是两个数相乘等于$x$的情况,我们直接暴力枚举因子就行了。如果是两个数相减等于$x$的情况,我们把每个数压到$bitset$上,直接看$a[i]$的那个$bitset$数组右移$x$位以后再与一下原数组,如果不为0那么显然是有解的。如果是加法的话,我们考虑用另一个$bitset$来压$b[i]$,其中$b[i]$表示$c-a[i]$,其中$c$为$a[i]$的最大值。那么只要$a[i]=b[j]+x-c$,那就是有解的。于是我们把这个$bitset$数组右移$c-x$位,再与$a$数组的$bitset$数组与一下就行了。
//It is made by wfj_2048~
#include <algorithm>
#include <iostream>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define inf (1<<30)
#define N (1000010)
#define il inline
#define RG register
#define ll long long
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) using namespace std; struct node{ int i,opt,l,r,x; }q[N]; int cnt[N],bl[N],ans[N],a[N],b[N],n,m,mc,block; bitset <> f,g,h; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
return q*x;
} il int cmp(const node &a,const node &b){
if (bl[a.l]==bl[b.l]) return a.r<b.r;
return bl[a.l]<bl[b.l];
} il void add(RG int x){
cnt[a[x]]++;
if (cnt[a[x]]==) f[a[x]]=,g[b[x]]=;
return;
} il void del(RG int x){
cnt[a[x]]--;
if (!cnt[a[x]]) f[a[x]]=,g[b[x]]=;
return;
} il int check(RG int opt,RG int x){
if (opt==){
h=f,h>>=x,h&=f;
if (h.count()) return ;
}
if (opt==){
h=g,h>>=abs(mc-x),h&=f;
if (h.count()) return ;
}
if (opt==){
RG int lim=sqrt(x+);
for (RG int i=;i<=lim;++i){
if (x%i) continue;
if (cnt[i] && cnt[x/i]) return ;
}
}
return ;
} il void work(){
n=gi(),m=gi(),block=sqrt(n),mc=;
for (RG int i=;i<=n;++i)
a[i]=gi(),b[i]=mc-a[i],bl[i]=(i-)/block+;
for (RG int i=;i<=m;++i)
q[i].i=i,q[i].opt=gi(),q[i].l=gi(),q[i].r=gi(),q[i].x=gi();
sort(q+,q+m+,cmp); RG int L=q[].l,R=q[].r;
for (RG int i=L;i<=R;++i) add(i); ans[q[].i]=check(q[].opt,q[].x);
for (RG int i=;i<=m;++i){
while (L>q[i].l) add(--L);
while (R<q[i].r) add(++R);
while (L<q[i].l) del(L++);
while (R>q[i].r) del(R--);
ans[q[i].i]=check(q[i].opt,q[i].x);
}
for (RG int i=;i<=m;++i)
puts(ans[i] ? "yuno" : "yumi");
return;
} int main(){
File("yn");
work();
return ;
}
bzoj4810 [Ynoi2017]由乃的玉米田的更多相关文章
- LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...
- bzoj4810 [Ynoi2017]由乃的玉米田 bitset优化+暴力+莫队
[Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 917 Solved: 447[Submit][Status][Di ...
- BZOJ4810:[YNOI2017]由乃的玉米田(莫队,bitset)
Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一 ...
- BZOJ4810 Ynoi2017由乃的玉米田(莫队+bitset)
多组询问不强制在线,那么考虑莫队.bitset维护当前区间出现了哪些数,数组记录每个数的出现次数以维护bitset.对于乘法,显然应有一个根号范围内的因子,暴力枚举即可.对于减法,a[i]-a[j]= ...
- bzoj4810 [Ynoi2017]由乃的玉米田 莫队+bitset(+数论)
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4810 题解 看数据范围和题目名字应该是根号算法. 因为询问除了区间外,还有第 \(3\) 个参 ...
- 【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队
[BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所 ...
- 【bzoj4810】[Ynoi2017]由乃的玉米田 莫队算法+STL-bitset
题目描述 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序列a,长度为n ...
- [BZOJ]4810: [Ynoi2017]由乃的玉米田
Time Limit: 30 Sec Memory Limit: 256 MB Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差 ...
- 【BZOJ4810】[YNOI2017] 由乃的玉米田(莫队+bitset)
点此看题面 大致题意: 给你一段序列,每次询问一段区间内是否存在两个数的差或和或积为\(x\). 莫队算法 看到区间询问+可以离线,首先想到了莫队啊. 但是,在较短的时间内更新信息依然比较难以实现. ...
随机推荐
- jenkins-Couldn't find any revision to build. Verify the repository and branch configuration for this job
参考解决方法: https://issues.jenkins-ci.org/browse/JENKINS-20502 原因分析:jenkins无法准确识别revision 操作方法: 在 branch ...
- IntelliJ Idea和IntelliJ webstrm 常用快捷键
Ctrl+Shift + Enter,语句完成"!",否定完成,输入表达式时按 "!"键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shif ...
- 获取 metadata 的完整例子 - 每天5分钟玩转 OpenStack(166)
我们将通过实验详细分析 instance 从 nova-api-metadata 获取信息的完整过程. 环境介绍 1. 一个 all-in-one 环境(多节点类似). 2. 已创建 neutron ...
- 使用Func<>和Action简化委托
/// <summary> /// 入口 /// </summary> public void Run() { TestDelegate t = test; t(); Acti ...
- session的使用
一.什么是session? Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时, ...
- 数据库dbutils
common-dbutils.jarQueryRunnerupdate方法:* int update(String sql, Object... params) --> 可执行增.删.改语句* ...
- *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ViewController > setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ViewController > ...
- linuxCentOs6前期简单且必要的设置
1.修改主机名 Sudo vi /etc/sysconfig/network(需要重启) Hostname master (不需要重启,设置当前主机名为master) Hostname查看当前主机名 ...
- [SinGuLaRiTy] 米勒罗宾素数判定法
[SinGuLaRiTy-1003] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 背景 数论学家利用费马小定理研究出了多种素数测试办法,M ...
- 老李分享知识:性能测试之TPS和吞吐率
老李分享知识:性能测试之TPS和吞吐率 当增大系统的压力(或添加并发用户数)时,吞吐率和TPS的改变曲线呈大体一致,则系统基本稳定. 若压力增大时,吞吐率的曲线添加到一定程度后出现改变缓 ...