【BZOJ】 4810: [Ynoi2017]由乃的玉米田
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4810
思路还是比较显然,第一反应应该就是莫队。
考虑怎么维护三个询问,想到了要维护每一个数字是否出现就想到了要用bitset。那么这道题就做完了。
莫队相当于是在利用bitset维护一个01序列$f$,表示每一个数字是否出现在这一段区间。
1.如果差为$x$,将这个$f$左移$x$然后判断是否和原来的$f$集合有交集即可。
2.如果和为$x$,将这个$f$翻转并左移$100000-x$然后判断是否和原来的$f$集合有交集即可。
3.如果积为$x$,直接${O(\sqrt{x})}$的枚举判断即可。
复杂度${O(n\sqrt{n}+\frac{n^{2}}{64})}$
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<map>
#include<bitset>
using namespace std;
#define llg int
#define maxn 100010
#define MA 100000
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); inline llg getint()
{
llg w=,q=; char c=getchar();
while((c<'' || c>'') && c!='-') c=getchar();
if (c=='-') q=, c=getchar(); while (c>='' && c<='') w=w*+c-'', c=getchar();
return q ? -w : w;
} bitset<MA+>f,g;
llg ans[maxn],n,m,a[maxn],KUAI,cnt[maxn]; struct node {llg ty,l,r,x,num;}ask[maxn]; bool cmp(const node&a,const node&b)
{
if (a.l/KUAI==b.l/KUAI) return a.r<b.r;
else return a.l/KUAI<b.l/KUAI;
} void init()
{
cin>>n>>m;
KUAI=sqrt(n);
for (llg i=;i<=n;i++) a[i]=getint();
for (llg i=;i<=m;i++)
ask[i].ty=getint(),ask[i].l=getint(),ask[i].r=getint(),ask[i].x=getint(),ask[i].num=i;
sort(ask+,ask+m+,cmp);
} int main()
{
yyj("mo");
init();
llg l=,r=;
for (llg i=;i<=m;i++)
{
while (l>ask[i].l) l--,cnt[a[l]]++,f[a[l]]=,g[MA-a[l]]=;
while (r<ask[i].r) r++,cnt[a[r]]++,f[a[r]]=,g[MA-a[r]]=;
while (l<ask[i].l) {cnt[a[l]]--; if (!cnt[a[l]]) f[a[l]]=,g[MA-a[l]]=; l++;}
while (r>ask[i].r) {cnt[a[r]]--; if (!cnt[a[r]]) f[a[r]]=,g[MA-a[r]]=; r--;} if (ask[i].ty==)
{
if (((f>>ask[i].x)&f).any()) ans[ask[i].num]=; else ans[ask[i].num]=; } if (ask[i].ty==)
{
if (((g>>(MA-ask[i].x))&f).any()) ans[ask[i].num]=; else ans[ask[i].num]=;
} if (ask[i].ty==)
{
for (llg k=;k*k<=ask[i].x;k++)
if (ask[i].x%k==)
{
if (f[k] && f[ask[i].x/k]) {ans[ask[i].num]=; break;}
}
}
if (ask[i].x== && f[]) ans[ask[i].num]=;
}
for (llg i=;i<=m;i++) puts(ans[i]?"yuno":"yumi");
return ;
}
【BZOJ】 4810: [Ynoi2017]由乃的玉米田的更多相关文章
- [BZOJ]4810: [Ynoi2017]由乃的玉米田
Time Limit: 30 Sec Memory Limit: 256 MB Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差 ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田 (莫队 + bitset)
题目链接 BZOJ 4810 首先对询问离线, 莫队算法处理. 首先我们可以用bitset维护处当前区间中是否存在某个数. 对于询问1, 我们可以用 ((f >> q[i].x) &am ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4810 [题目大意] 给出一个数列,有三种区间查询, 分别查询区间是否存在两个数乘积为x ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田 ——Bitset 莫队算法
加法和减法的操作都能想到Bitset. 然后发现乘法比较难办,反正复杂度已经是$O(n\log{n})$了 枚举因数也不能更差了,直接枚举就好了. #include <map> #incl ...
- 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+莫队
[BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所 ...
- bzoj 3594: [Scoi2014]方伯伯的玉米田 dp树状数组优化
3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 314 Solved: 132[Submit][Sta ...
- bzoj4810 [Ynoi2017]由乃的玉米田
Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一 ...
随机推荐
- 剑指offer——python【第2题】替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”. 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 理解 很容易想到用pytho ...
- 二叉查找树,AVL树,伸展树【CH4601普通平衡树】
最近数据结构刚好看到了伸展树,在想这个东西有什么应用,于是顺便学习一下. 二叉查找树(BST),对于树上的任意一个节点,节点的左子树上的关键字都小于这个节点的关键字,节点的右子树上的关键字都大于这个节 ...
- java 编写函数将字符串的首尾空格删除。
String 类有个方法去除字符串首位空格: str.trim(); 查看源代码: public String trim() { int len = value.length; ; char[] va ...
- PHP实现数组中每个字符出现次数最多的,并且如果两个字符出现相同,则在前面的先输出功能
$arr = ['a', 'b', 'a', 'e', 'g', 'g', 'a']; $count_per_values = array_count_values($arr); $res = []; ...
- https://stackoverflow.com/questions/10423781/sql-data-range-min-max-category
select phone,count(order_id) as c from table_recordgroup by phoneorder by c desc SELECT CASEWHEN (ag ...
- linux之tail和head的使用
tail 基本介绍 用于显示文件的结尾的内容.在默认情况下,taild命令显示文件的后10行内容 表达式 tail [options] [filenames] 常用参数 -c:输出最后N个字节 -f: ...
- centos6多实例安装mysql
基本环境:setenforce 0service iptables stop yum install cmake libaio-devel ncurses-devel -yyum install gc ...
- java框架之SpringCloud(5)-Hystrix服务熔断、降级与监控
前言 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.不做任何处理的情况下,很容易导致服务雪崩. 服务雪崩:多个微服务之间调用的时候,假设 ...
- 图片居中table-cell
- Thinkphp----------Thinkphp3.2的目录结构介绍
ThinkPHP框架目录结构\index.php 入口文件\Application 应用目录\Public 资源文件目录\ThinkPHP 框架核心目录 ...