bzoj 4028 : [HEOI2015]公约数数列
之前看了好几次都没什么思路,今天下定决心把这题切了。
观察到$0-x$的gcd最多变化log次,因为它每次变化一定至少要去掉一个质因子,所以我们可以枚举gcd。
因为数据范围比较小,所以想到了分块。
设T为块的大小。
维护块首到块里每个位置的gcd和xor,再把xor排序。
修改的时候暴力改就行,复杂度$TlogT$。
询问的时候如果gcd在这个块里变化了,就把这个块暴力扫一遍,否则说明gcd在这个块里不变,相当于在区间里查是否有某个特定的值,随便二分一下,复杂度$T log inf+\frac{n}{T}logT$。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define N 100005
#define d 200
#define ll long long
using namespace std;
const int inf = ;
int gcd(int a,int b)
{
if(!b)return a;
return gcd(b,a%b);
}
int n;
int a[N];
int gd[N],xr[N],be[N];
vector<int>g[N];
vector<int>::iterator it;
bool cmp(int x,int y)
{
if(xr[x]==xr[y])return x<y;
return xr[x]<xr[y];
}
void gai(int x,int y)
{
int k=be[x];a[x]=y;
int l=(k-)*d+,r=min(k*d,n);
int xx=,now=a[l];g[k].clear();
for(int i=l;i<=r;i++)
{
now=gcd(now,a[i]);
xx=xx^a[i];
gd[i]=now;
xr[i]=xx;
g[k].push_back(i);
}
sort(g[k].begin(),g[k].end(),cmp);
}
void solve(ll x)
{
int now=a[];int cnt=,ed,xx=;
for(int i=;i<=n;i+=d)
{
cnt++;ed=min(n,i+d-);
if(gd[ed]%now!=)
{
for(int j=i;j<=ed;j++)
{
if(gd[j]%now!=)now=gcd(now,gd[j]);
if(x%now==&&x/now==(ll)(xx^xr[j]))
{
printf("%d\n",j-);
return ;
}
}
}
else
{
if(x%now==&&x/now<=inf)
{
int tmp=x/now;
int l=,r=g[cnt].size()-;
tmp^=xx;
if(xr[g[cnt][r]]<tmp)
{
xx^=xr[ed];
continue;
}
while(l<r)
{
int mid=(l+r)>>;
if(xr[g[cnt][mid]]>=tmp)r=mid;
else l=mid+;
}
if(xr[g[cnt][r]]==tmp)
{
printf("%d\n",g[cnt][r]-);
return ;
}
}
}
xx^=xr[ed];
}
puts("no");
return ;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int cnt=;
for(int i=;i<=n;i+=d)
{
cnt++;
int ed=min(n,i+d-);
int now=a[i];int xx=;
for(int j=i;j<=ed;j++)
{
be[j]=cnt;
now=gcd(now,a[j]);
xx=xx^a[j];
gd[j]=now;
xr[j]=xx;
g[cnt].push_back(j);
}
sort(g[cnt].begin(),g[cnt].end(),cmp);
}
int m;scanf("%d",&m);
char s[];
int t1,t2;ll t3;
for(int i=;i<=m;i++)
{
scanf("%s",s);
if(s[]=='M')
{
scanf("%d%d",&t1,&t2);
t1++;gai(t1,t2);
}
else
{
scanf("%lld",&t3);
solve(t3);
}
}
return ;
}
bzoj 4028 : [HEOI2015]公约数数列的更多相关文章
- BZOJ 4028: [HEOI2015]公约数数列 分块
4028: [HEOI2015]公约数数列 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4028 Description 设计一个数据结 ...
- BZOJ 4028: [HEOI2015]公约数数列 【分块 + 前缀GCD】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=4028 4028: [HEOI2015]公约数数列 Time Limit: 10 Sec ...
- 【BZOJ4028】[HEOI2015]公约数数列(分块)
[BZOJ4028][HEOI2015]公约数数列(分块) 题面 BZOJ 洛谷 题解 看一道题目就不会做系列 首先\(gcd\)最多只会有\(log\)种取值,所以我们可以暴力枚举出所有可能的\(g ...
- 【BZOJ4028】[HEOI2015]公约数数列 分块
[BZOJ4028][HEOI2015]公约数数列 Description 设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作: 1. M ...
- bzoj4028: [HEOI2015]公约数数列
Description 设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作: 1. MODIFY id x: 将 a_{id} 修改为 x ...
- 洛谷 P4108 / loj 2119 [HEOI2015] 公约数数列 题解【分块】
看样子分块题应该做的还不够. 题目描述 设计一个数据结构. 给定一个正整数数列 \(a_0, a_1, \ldots , a_{n-1}\),你需要支持以下两种操作: MODIFY id x: 将 \ ...
- luogu P4108 [HEOI2015]公约数数列——solution
-by luogu 不会啊.... 然后%了一发题解, 关键是 考虑序列{$a_n$}的前缀gcd序列, 它是单调不升的,且最多只会改变$log_2N$次,因为每变一次至少除2 于是,当我们询问x时: ...
- [HEOI2015]公约数数列
不错的分块题 gcd和xor其实并没有联系 这里,xor的按位性质没有半点卵用 gcd的性质却很关键: 一个数组,前缀gcd最多logn个不同的 gcd不太多,(暴力的基础) 所有考虑分块. 分块,每 ...
- [BZOJ4028][HEOI2015]公约数数列(分块)
先发掘性质: 1.xor和gcd均满足交换律与结合率. 2.前缀gcd最多只有O(log)个. 但并没有什么数据结构能同时利用这两个性质,结合Q=10000,考虑分块. 对每块记录这几个信息: 1.块 ...
随机推荐
- Linear Regression and Maximum Likelihood Estimation
Imagination is an outcome of what you learned. If you can imagine the world, that means you have lea ...
- PytorchZerotoAll学习笔记(一)
Pytorch的安装请参考torch的官方文档,传送门:https://pytorch.org/get-started/locally/ Numpy的复习 如果你之前没有学过Numpy的话,建议去看看 ...
- [持久更新] 剑指offer题目Python做题记录
第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...
- 北美跨境电商平台Wish透露未来一年在华规划
9月12日,北美跨境电商平台Wish在深圳透露了未来一年在中国区的重点规划.Wish中国区总裁丁浩川表示,在下一阶段,Wish公司将继续围绕 提升平台流量. 加强品类支撑. 深化库存管理. 推进物流改 ...
- Linux常用软件安装与配置——目录
http://blog.csdn.net/clevercode/article/details/45740431
- Daily Scrum2 11.4
昨天的任务大家都已经完成,daily scrum记录的是当日已经完成的任务. 今日任务列表: 杨伊:完成团队作业之软件测评的功能部分 徐钧鸿:CodingCook的model和helper部分 张艺: ...
- System 类的使用
/*System 系统类 主要用于获取系统的属性数据.System类常用的方法: arraycopy(Object src, int srcPos, Object dest, int destPos, ...
- TCP/IP,HTTP,HTTPS,WEBSocket协议
我看看着挺多的,我暂时没时间自己写,有需要的请借鉴 http://mp.weixin.qq.com/s?__biz=MzI0MDQ4MTM5NQ==&mid=2247486927&id ...
- 项目Beta冲刺(团队)第七天
1.昨天的困难 服务器部署出了问题,本地服务器差点崩掉 运行一直闪退,在查找哪里出现问题的路上一去不复返 2.今天解决的进度 成员 进度 陈家权 消息功能模块 赖晓连 问答功能模块 雷晶 部署服务器到 ...
- 关于地图首页会卡 button background惹的祸
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:sat=&q ...