[bzoj4810][Ynoi2017]由乃的玉米田 bitset+莫队

来源:互联网 发布:淘宝助手是什么 编辑:程序博客网 时间:2024/06/05 11:41

4810: [Ynoi2017]由乃的玉米田

Time Limit: 30 Sec  Memory Limit: 256 MB
[Submit][Status][Discuss]

Description

由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美。这排玉米一共有N株,它们的高度参差不齐。
由乃认为玉米田不美,所以她决定出个数据结构题
这个题是这样的:
给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是
否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1
,2,3选出的这两个数可以是同一个位置的数

Input

第一行两个数n,m
后面一行n个数表示ai
后面m行每行四个数opt l r x
opt表示这个是第几种操作,l,r表示操作的区间,x表示这次操作的x
定义c为每次的x和ai中的最大值,ai >= 0,每次的x>=2n,m,c <= 100000

Output

对于每个询问,如果可以,输出yuno,否则输出yumi

Sample Input

5 5
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

HINT

Source

这是由乃OI,不是云南OI

orz nzhtl1477

#include<algorithm>#include<iostream>#include<cstring>#include<bitset>#include<cstdio>#include<cmath>using namespace std;typedef long long ll;const int N = 100000 + 5;int n,m,a[N],c[N],ans[N];struct data{int l,r,opt,x,last,id;friend bool operator <(data x,data y){return x.last != y.last ? x.last < y.last : x.r < y.r;}}da[N];bitset<N>f,g;void capmo(){for( int i = 1, l = 1, r = 0; i <= m; i++ ){for( ; r < da[i].r; ){ r++; if(!c[a[r]]++){ f[a[r]] = 1; g[N-a[r]] = 1; }}for( ; l > da[i].l; ){ l--; if(!c[a[l]]++){ f[a[l]] = 1; g[N-a[l]] = 1; }}for( ; r > da[i].r; ){ if(!--c[a[r]]){ f[a[r]] = 0; g[N-a[r]] = 0; } r--;}for( ; l < da[i].l; ){ if(!--c[a[l]]){ f[a[l]] = 0; g[N-a[l]] = 0; } l++; }if( da[i].opt == 1 ){ ans[da[i].id] = ( ( f >> da[i].x) & f ).any(); }if( da[i].opt == 2 ){ ans[da[i].id] = ( ( g >> (N-da[i].x) ) & f ).any(); }if( da[i].opt == 3 ){if( da[i].x == 0 && f[0] ){ ans[da[i].id] = 1; }for( int j = 1; j*j <= da[i].x; j++ )if(!(da[i].x%j) && ( f[j]&f[da[i].x/j] )){ans[da[i].id] = 1; break;}}}}int main(){scanf("%d%d", &n, &m);for( int i = 1; i <= n; i++ ) scanf("%d", &a[i]);int block = (int)sqrt(n);for( int i = 1; i <= m; i++ ){scanf("%d%d%d%d", &da[i].opt, &da[i].l, &da[i].r, &da[i].x );da[i].last = (da[i].l+1)/block; da[i].id = i;}std::sort(da+1,da+m+1);capmo();for( int i = 1; i <= m; i++ ) printf(ans[i]?"yuno\n":"yumi\n");return 0;}


 

阅读全文
0 0
原创粉丝点击