http://www.lydsy.com/JudgeOnline/problem.php?id=4810

问题就在于怎么快速查询
我们先用莫队转移,但是没办法快速地查询,那么我们就用bitset这个东西快速查询。
cnt是一个权值数组,记录每个数出现次数,a,c是两个bitset
减法:a[i]-a[j]=x那么我们把a<<x&a看是否出现1,有1就说明可以
加法:a[i]+a[j]=x我们发现没办法向上面那个样子直接搞,但是我们可以把加法转换成减法。我们化简一下式子:a[i]=x-c+c-a[j] c是一个a中最大的数
那么我们就搞出了减法a[i]=(x-c)+c-a[j] a<<(x-c)&c
乘法:枚举每个因数是否存在。
#include<bits/stdc++.h>
using namespace std;
const int N = , MAX = ;
struct query {
int type, l, r, x, block, id;
} q[N];
bitset<N> a, c;
int n, m;
int cnt[N], x[N], ans[N];
inline int read()
{
int x = , f = ; char c = getchar();
while(c < '' || c > '') { if(c == '-') f = -; c = getchar(); }
while(c >= '' && c <= '') { x = x * + c - ''; c = getchar(); }
return x * f;
}
bool cp(query i, query j) { return i.block == j.block ? i.r < j.r : i.block < j.block; }
void add(int pos)
{
if(!cnt[x[pos]])
{
a[x[pos]] = ;
c[MAX - x[pos]] = ;
}
++cnt[x[pos]];
}
void del(int pos)
{
if(cnt[x[pos]] == )
{
a[x[pos]] = ;
c[MAX - x[pos]] = ;
}
--cnt[x[pos]];
}
int query(int type, int x)
{
if(type == ) // 减法 如果a >> x & a == 1 那么就是有
return (a & (a << x)).any();
if(type == )
return (c & (a << (MAX - x))).any();
for(int i = ; i * i <= x; ++i) if(x % i == && cnt[i] && cnt[x / i]) return ;
return ;
}
void solve()
{
int l = , r = ; add();
for(int i = ; i <= m; ++i)
{
while(l < q[i].l) {
del(l); ++l;
}
while(l > q[i].l) {
--l; add(l);
}
while(r < q[i].r) {
++r; add(r);
}
while(r > q[i].r) {
del(r); --r;
}
ans[q[i].id] = query(q[i].type, q[i].x);
}
for(int i = ; i <= m; ++i) puts(ans[i] == ? "yuno" : "yumi");
}
int main()
{
n = read(); m =read();
for(int i = ; i <= n; ++i) x[i] = read();
int block = sqrt(n);
for(int i = ; i <= m; ++i)
{
q[i].type = read(); q[i].l = read(); q[i].r = read(); q[i].x = read();
q[i].block = (q[i].l - ) / block; q[i].id = i;
}
sort(q + , q + m + , cp);
solve();
return ;
}
 

bzoj4810的更多相关文章

  1. BZOJ4810 Ynoi2017由乃的玉米田(莫队+bitset)

    多组询问不强制在线,那么考虑莫队.bitset维护当前区间出现了哪些数,数组记录每个数的出现次数以维护bitset.对于乘法,显然应有一个根号范围内的因子,暴力枚举即可.对于减法,a[i]-a[j]= ...

  2. 【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队

    [BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所 ...

  3. bzoj4810 [Ynoi2017]由乃的玉米田

    Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题   这个题是这样的: 给你一 ...

  4. LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田

    题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...

  5. BZOJ4810:[YNOI2017]由乃的玉米田(莫队,bitset)

    Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题   这个题是这样的: 给你一 ...

  6. 【bzoj4810】【ynoi2018】由乃的玉米田

    4810: [Ynoi2017]由乃的玉米田 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 1090  Solved: 524[Submit][Sta ...

  7. bzoj4810 [Ynoi2017]由乃的玉米田 bitset优化+暴力+莫队

    [Ynoi2017]由乃的玉米田 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 917  Solved: 447[Submit][Status][Di ...

  8. 【bzoj4810】由乃的玉米田

    lxl丧心病狂-- 首先允许离线的区间询问一看就是莫队.那么我们看下怎么莫队? 不会. "由乃题多半是不可做的."于是我看了下题解--好吧果然是bitset 用bitset维护当前 ...

  9. 【BZOJ4810】[YNOI2017] 由乃的玉米田(莫队+bitset)

    点此看题面 大致题意: 给你一段序列,每次询问一段区间内是否存在两个数的差或和或积为\(x\). 莫队算法 看到区间询问+可以离线,首先想到了莫队啊. 但是,在较短的时间内更新信息依然比较难以实现. ...

  10. 【bzoj4810】[Ynoi2017]由乃的玉米田 莫队算法+STL-bitset

    题目描述 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序列a,长度为n ...

随机推荐

  1. MySQL-----删

    删 **清空数据库内容** delete from 数据库表名; ----清内容,但是自增列的数不清. truncate table 数据库表名; --------自增列的数也清. **清除指定的行数 ...

  2. 4. GC 算法(实现篇) - GC参考手册

    您应该已经阅读了前面的章节: 垃圾收集简介 - GC参考手册 Java中的垃圾收集 - GC参考手册 GC 算法(基础篇) - GC参考手册 学习了GC算法的相关概念之后, 我们将介绍在JVM中这些算 ...

  3. hihoCoder #1162 : 骨牌覆盖问题·三

    #1162 : 骨牌覆盖问题·三 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 前两周里,我们讲解了2xN,3xN骨牌 ...

  4. POJ-2239 Selecting Courses,三维邻接矩阵实现,钻数据空子。

    Selecting Courses Time Limit: 1000MS   Memory Limit: 65536K       Description It is well known that ...

  5. 用PowerPoint中的VB实现课件中的智能交互

    http://www.duxiushan.net/index.asp?xAction=xReadNews&NewsID=294 我们使用PPT的目的只有一个,即更好地达成“沟通.演说.汇报.讲 ...

  6. SQL SERVER 2012 第三章 T-SQL 基本SELECT语句用法,Where子句详细用法

    select [all|distinct] [top (<expression>) [Percent] [with ties]] <column list> [from < ...

  7. TCP/IP学习笔记(3)----IP,ARP,RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层(网络层协议),ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP ...

  8. oracle常用函数积累

    --oracle常用函数积累-- --1.字符串长度:LENGTH ,语法: CONCAT(string) --示例 select LENGTH('AA_BB') from dual;--结果:5 - ...

  9. tornado的http服务器实现

    使用tornado实现的一个简单http服务器:只需要定义自己的处理方法,其他的东西全部交给tornado完成. #coding:utf-8 import tornado.httpserver imp ...

  10. Smart Home DIY 计划

    工作了这么长时间了,感觉自己眼下的工作内容非常不利于技术水平的提升,对此状况,我心里深感不踏实.因此,我决定利用下班时间.边学习边做,做一套真正可用的智能家居系统,首先部署到自己居住的房间. 对此智能 ...