首页 > 其他分享 >BZOJ 4810([Ynoi2017]由乃的玉米田-莫队)

BZOJ 4810([Ynoi2017]由乃的玉米田-莫队)

时间:2022-10-24 18:00:44浏览次数:65  
标签:cnt 4810 return int ll 玉米田 read 莫队 define


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

用bitset+莫队。

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
#define
#define
bitset<100000> f,g;
int b[MAXN],res[MAXN],belong[MAXN],cnt[MAXN]={};
struct node{
int op,l,r,x,id;
friend bool operator<(node a,node b) {
if (belong[a.l] ^ belong[b.l] )
return belong[a.l] < belong[b.l];
return a.r<b.r;
}
}a[MAXN];
int main()
{
// freopen("bzoj4810.in","r",stdin);
// freopen(".out","w",stdout);
int n=read(),m=read();
int BS=sqrt(n);
For(i,n)
b[i]=read();
For(i,m){
a[i]=node{read(),read(),read(),read(),i};
}
For(i,n)
belong[i]=(i-1)/BS+1;
sort(a+1,a+m+1);
int l=0,r=0;
For(i,m){
while(l>a[i].l){
l--,cnt[b[l]]++;f[b[l]]=1;g[100000-b[l]]=1;
}while(r<a[i].r){
r++,cnt[b[r]]++;f[b[r]]=1;g[100000-b[r]]=1;
}while(l<a[i].l){
cnt[b[l]]--;if(!cnt[b[l]])f[b[l]]=0,g[100000-b[l]]=0;l++;
}while(r>a[i].r){
cnt[b[r]]--;if(!cnt[b[r]])f[b[r]]=0,g[100000-b[r]]=0;r--;
}
if(a[i].op==1){
res[a[i].id] = ((f>>a[i].x)&f).any();
}else if(a[i].op==2){
res[a[i].id] = ((g>>(100000-a[i].x))&f).any();
}else{
for(int j=1;j*j<=a[i].x;j++) if(a[i].x%j==0){
if (f[j]==1&&f[a[i].x/j]==1) {res[a[i].id]=1;break;}
}
if(a[i].x==0&&f[0]) res[a[i].id]=1;
}
}
For(i,m)
puts(res[i]?"yuno":"yumi");
return 0;
}


标签:cnt,4810,return,int,ll,玉米田,read,莫队,define
From: https://blog.51cto.com/u_15724837/5790764

相关文章

  • 树上莫队 学习笔记
    树上莫队本质上是把树上的结点转化为区间信息,从而使用莫队求解。但是不能直接使用树链剖分的\(\text{dfs}\)序,因为树上任意一条路径所对应的区间不是连续的。此处需要用......
  • 莫队
    排序模板:boolcmp(queryx,queryy){if(id[x.l]==id[y.l]){if(id[x.l]&1==1)returnx.r<y.r;elsereturnx.r>y.r; }elsereturnid......
  • 【SA+莫队】P2336 [SCOI2012]喵星球上的点名
    [SCOI2012]喵星球上的点名题目描述a180285幸运地被选做了地球到喵星球的留学生。他发现喵星人在上课前的点名现象非常有趣。假设课堂上有\(n\)个喵星人,每个喵星人的......
  • 莫队 学习笔记
    基本莫队询问离线,按块排序,\(\sqrtn\)分块,两个指针来回扫。总时间复杂度为\(\Theta(n\sqrtn)\)。带修莫队考虑增加一维时间戳(当前修改次数)。在原有基础上,若左右端......
  • 莫队
    用途问题存在可从区间\(l,r\)\(O(1)\)转移到\(l+1,r\)\(or\)\(l-1,r\)\(or\)\(l,r+1\)\(or\)\(l,r-1\)的时候就可以使用莫队。实现两个指针记录\(l,r\),......
  • 莫队
    一.莫队(静态莫队)我们以LuoguP3901数列找不同为例讲一下静态莫队这道题是个绿题,因为数据比较弱,但真是一道良心的莫队练手题莫队是由前国家队队长莫涛发明的莫队算法......
  • 【luogu P5906】【模板】回滚莫队&不删除莫队
    【模板】回滚莫队&不删除莫队题目链接:luoguP5906题目大意给你一个序列,多次询问每次问一个区间,求里面相同的数的最远间隔距离。思路考虑莫队,发现加入一个点好处理,但是......
  • 2021杭电多校1 J (普通莫队 树状数组)
    题意:给出1e5个二维平面上的坐标点0<=(x,y)<=1e5,1e5个询问,每次问x0,y0到x1,y1的矩阵中有多少y值不同的坐标点。思路:操作只有询问,不强制在线,数据范围1e5,就差把莫......
  • 普通莫队解决区间众数的个数
    SP32900KDOMINO-K-dominantarrayP1997faebdc的烦恼P3709大爷的字符串题被摩尔投票法洗脑半天,发现好像可以直接拿莫队写啊喂!针对原数据离散化,后开一个计数器和一......
  • 【luogu CF633H】Fibonacci-ish II(莫队)(线段树)(矩阵乘法)
    Fibonacci-ishII题目链接:luoguCF633H题目大意给你一个序列,每次问你一个区间,把里面的数拿出来去重排序,第i个位置乘上斐波那契数列第i项之后所有数的和。思路这题......