小清新人渣的本愿
链接:https://www.luogu.com.cn/problem/P3674
题目描述:给定一个序列,有三种操作:
询问一个区间是否可以选出两个数它们的差为。
询问一个区间是否可以选出两个数它们的和为。
询问一个区间是否可以选出两个数它们的积为。
题解:对于第三种操作,可以直接莫队,由于枚举约数是的。
对于第一种操作,可用维护每个数,查询时可用&。
对于第二种操作,可以维护一个反向的,就和第一种操作一样了。
#include<iostream>
#include<vector>
#include<bitset>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
int op,l,r,x,num,block;
bool operator < (const node &a)const
{
if (block!=a.block)
return block<a.block;
return r<a.r;
}
};
node L[100001];
vector<int>p[100001];
vector<int>d[100001];
int maxn,tong[100001],sz,a[100001],n,m,res,lpos,rpos;
bool ans[100001];
bitset<100000>S;
bitset<100000>S2;
bool cmp(node a,node b)
{
return a.l<b.l;
}
void movepos(int x,int d)
{
tong[a[x]]+=d;
if (tong[a[x]]==(d+1)/2)
{
S[a[x]]=(d+1)/2;
S2[maxn-a[x]]=(d+1)/2;
}
return;
}
int main()
{
cin>>n>>m;
for (int i=1;i<=n;++i)
{
cin>>a[i];
maxn=max(maxn,a[i]);
}
for (int i=1;i<=m;++i)
{
cin>>L[i].op>>L[i].l>>L[i].r>>L[i].x;
L[i].num=i;
}
sz=sqrt(m);
sort(L+1,L+m+1,cmp);
for (int i=1;i<=m;++i)
L[i].block=(i-1)/sz+1;
sort(L+1,L+m+1);
lpos=1;
rpos=0;
for (int i=1;i<=m;++i)
{
while (lpos<L[i].l)
movepos(lpos++,-1);
while (lpos>L[i].l)
movepos(--lpos,1);
while (rpos<L[i].r)
movepos(++rpos,1);
while (rpos>L[i].r)
movepos(rpos--,-1);
if (L[i].op==1)
ans[L[i].num]=(S&(S>>L[i].x)).count()>=1;
if (L[i].op==2)
{
if (L[i].x>=maxn)
ans[L[i].num]=((S>>(L[i].x-maxn))&S2).count()>=1;
else
ans[L[i].num]=(S&(S2>>(maxn-L[i].x))).count()>=1;
}
if (L[i].op==3)
{
for (int j=1;j*j<=L[i].x;++j)
if (L[i].x%j==0)
ans[L[i].num]|=tong[j]&&tong[L[i].x/j];
}
}
for (int i=1;i<=m;++i)
{
if (ans[i])
cout<<"hana"<<endl;
else
cout<<"bi"<<endl;
}
return 0;
}
作者:zhouhuanyi
出处:https://www.cnblogs.com/zhouhuanyi/p/16983613.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现