题目传送门

题目大意:Bash喜欢对数列进行操作。第一种操作是询问l~r区间内的gcd值是否几乎为x,几乎为表示能否至多修改一个数达到。第二种操作是将ai修改为x。总共Q个询问,N个数。

Solution:简单来说,就是对区间gcd值的维护,使用线段树实现。

code:

#include <cstdio>
using namespace std; int read()
{
char c;while(c=getchar(),c<''||c>'');
int x=c-'';while(c=getchar(),c>=''&&c<='')x=x*+c-'';
return x;
} const int MAXN=*+; int N,Q,a[MAXN],o,cnt,x,y,c;
int seg[MAXN*]; int gcd(int x,int y){return !y?x:gcd(y,x%y);} void build(int node,int l,int r)
{
if(l==r)seg[node]=a[l];
else{
int mid=l+r>>;
build(node<<,l,mid);
build(node<<|,mid+,r);
seg[node]=gcd(seg[node<<],seg[node<<|]);//更行该节点的值
}
return ;
}//建树 void change(int node,int l,int r,int dist,int v)
{
if(l==dist && r==dist){
seg[node]=v;
return ;
}//到达要修改的节点
int mid=l+r>>;
if(mid>=dist)change(node<<,l,mid,dist,v);
else change(node<<|,mid+,r,dist,v);
seg[node]=gcd(seg[node<<],seg[node<<|]);//更新
return ;
} void get(int l,int r,int ql,int qr,int node,int v)
{
if(cnt>)return ;//优化
if(l==r){//此处之所以可以这样,因为我们在搜到这个点之前保证了这个点的seg值%v不为0
cnt++;
return ;
}
int mid=l+r>>;
if(mid>=ql&&seg[node<<]%v/*此处为上面做法的原因*/) get(l,mid,ql,qr,node<<,v);
if(mid<qr &&seg[node<<|]%v)get(mid+,r,ql,qr,node<<|,v);
return ;
} void find(int x,int y,int c)
{
cnt=;get(,N,x,y,,c);
if(cnt<=)puts("YES");
else puts("NO");
return ;
} int main()
{
N=read();
register int i,j;
for(i=;i<=N;i++)a[i]=read();
build(,,N);
Q=read();
while(Q--){
o=read();
if(o==){x=read(),y=read(),c=read(),find(x,y,c);}
else {x=read(),y=read(),change(,,N,x,y);}
}
return ;
}

Codecraft-18 and Codeforces Round #458:D,Bash and a Tough Math Puzzle的更多相关文章

  1. Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论

    Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论 题意 给你一段数,然后小明去猜某一区间内的gcd,这里不一定是准确值,如果在这个区间内改变 ...

  2. Codeforces 914D Bash and a Tough Math Puzzle (ZKW线段树)

    题目链接  Round #458 (Div. 1 + Div. 2, combined)  Problem D 题意  给定一个序列,两种询问:单点修改,询问某个区间能否通过改变最多一个数使得该区间的 ...

  3. 【Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) D】Bash and a Tough Math Puzzle

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 对于1操作 令len = r-l+1 等价于查找l..r这个范围内x的倍数的个数是否大于等于len-1 也即l..r这个范围内不是x ...

  4. Codeforces.914D.Bash and a Tough Math Puzzle(线段树)

    题目链接 \(Description\) 给定一个序列,两种操作:一是修改一个点的值:二是给一个区间\([l,r]\),问能否只修改一个数使得区间gcd为\(x\). \(Solution\) 想到能 ...

  5. 2018.12.08 codeforces 914D. Bash and a Tough Math Puzzle(线段树)

    传送门 线段树辣鸡题. 题意简述:给出一个序列,支持修改其中一个数,以及在允许自行修改某个数的情况下询问区间[l,r][l,r][l,r]的gcdgcdgcd是否可能等于一个给定的数. 看完题就感觉是 ...

  6. [Codeforces 914D] Bash and a Tough Math Puzzle

    [题目链接] https://codeforces.com/contest/914/problem/D [算法] 显然 , 当一个区间[l , r]中为d倍数的数的个数 <= 1 , 答案为Ye ...

  7. B - Bash and a Tough Math Puzzle CodeForces - 914D (线段树的巧妙应用)

    题目大意:当输入2时,将p处的点的值修改为x, 当输入1时,判断区间[L,R]的gcd是否几乎正确,几乎正确的定义是最多修改一个数,使得区间[L,R]的gcd为x. 题解:用线段树维护一个gcd数组, ...

  8. Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD

    题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整 ...

  9. Bash and a Tough Math Puzzle CodeForces - 914D (线段树二分)

    大意:给定序列, 单点修改, 区间询问$[l,r]$内修改至多一个数后$gcd$能否为$x$ 这题比较有意思了, 要注意到询问等价于$[l,r]$内最多有1个数不为$x$的倍数 可以用线段树维护gcd ...

随机推荐

  1. SOA架构

    基于服务的SOA架构_后续篇   今天是元宵节,首先祝各位广大博友在接下来的光阴中技术更上一层,事事如意!(没能在元宵节发布,今天就补上吧) 昨天简单介绍了一下本人在近期开发过的一个电商购物平台的架构 ...

  2. web API之post参数传递

    最近公司开发一个新产品,前端用的vue+element,后端用的.net core ,刚开始接触这块,接口写完后在调用接口时总出现问题,尤其是post传递参数时,很多时候都获取不到参数,没办法接口都要 ...

  3. 用画小狗的方法来解释Java中的值传递

    在开始看我画小狗之前,咱们先来看道很简单的题目: 下面程序的输出是什么? Dog myDog = new Dog("旺财"); changeName(myDog); System. ...

  4. tp3.2中的 I () 方法

    I('get.id'); // 相当于 $_GET['id']

  5. ESlint 语法检测配置说明

    部分vue-cli脚手架创建的默认eslint规则: 代码末尾不能加分号 ; 代码中不能存在多行空行 tab键不能使用,必须换成两个空格 代码中不能存在声明了但未使用的变量 关闭eslint 这里只说 ...

  6. Charles Proxy v4.1.3 Mac、Win64、Win32破解版

    http://charles.iiilab.com/ 1. 下载Charles Proxy 4.1.3版本,百度云盘下载 或 去官网下载 2. 安装后先打开Charles一次(Windows版可以忽略 ...

  7. 前端使用ajax传到后台的实体类的多个属性,直接用Map接收

    前端ajax传过来的数据按照以上方法接收Map中 var ip = $("#ip").val(); var port = $("#port").val(); v ...

  8. PAT——1003. 我要通过!

    “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 1 ...

  9. 【题解】洛谷P1541 [NOIP2010TG] 乌龟棋(类似背包的DP)

    题目来源:洛谷P1541 思路 类似背包的题 总之就是四种卡牌取的先后顺序不同导致的最终ans不同 所以我们用一个四维数组每一维分别表示第几种取了几张的最大分数 然后就是简单DP解决 代码 #incl ...

  10. CRegKey 注册表操作 转

    转自 http://blog.csdn.net/pbymw8iwm/article/details/6931946 1.简介 CRegKey提供了对系统注册表的操作方法,通过CRegKey类,可以方便 ...