CF914D

用线段树乱搞一下就行qwq

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm> using namespace std; const int M = 3000001;
int n,m,k,a[M],d[M],al,ar,tp,s; int gcd(int x,int y)
{
if(!y) return x;
return gcd(y,x%y);
} void built(int now,int l,int r)
{
if(l==r)
{
d[now]=a[l];
return ;
}
int mid=(l+r)>>1;
built(now*2,l,mid);
built(now*2+1,mid+1,r);
d[now]=gcd(d[now*2],d[now*2+1]);
} void ask(int now,int l,int r,int L,int R,int k)
{
if(l==r)
{
s++;
return;
}
int mid=(l+r)>>1;
if(L<=l && r<=R)
{
if(d[now]%k==0) return ;
if(d[now*2]%k && d[now*2+1]%k) return s+=2,void();
if(d[now*2]%k) ask(now*2,l,mid,L,R,k);
else ask(now*2+1,mid+1,r,L,R,k);
return ;
}
if(d[now*2]%k && L<=mid) ask(now*2,l,mid,L,R,k);
if(s>1) return;
if(d[now*2+1]%k && R>mid) ask(now*2+1,mid+1,r,L,R,k);
return; } void mody(int now,int l,int r,int x,int k)
{
if(l==r) return d[now]=k, void();
int mid=(l+r)>>1;
if(x<=mid) mody(now*2,l,mid,x,k);
else mody(now*2+1,mid+1,r,x,k);
d[now]=gcd(d[now*2],d[now*2+1]);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
built(1,1,n);
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d",&tp);
if(tp==1)
{
scanf("%d%d%d",&al,&ar,&k);
s=0; ask(1,1,n,al,ar,k);
if(s<2) printf("YES\n");
else printf("NO\n");
}
else
{
scanf("%d%d",&al,&ar);
mody(1,1,n,al,ar);
}
}
}

CF914D的更多相关文章

  1. [CF914D]Bash and a Tough Math Puzzle

    给定一个数列$a_1,a_2,...,a_n$,支持两种操作 1 l r x,猜测数列中[l,r]位置上的数的最大公约数$x$,判断这个猜测是否是接近正确的.如果我们可以在数列[l,r]位置中改动至多 ...

  2. cf914D. Bash and a Tough Math Puzzle(线段树)

    题意 题目链接 Sol 直接在线段树上二分 当左右儿子中的一个不是\(x\)的倍数就继续递归 由于最多递归到一个叶子节点,所以复杂度是对的 开始时在纠结如果一段区间全是\(x\)的两倍是不是需要特判, ...

  3. CF914D Bash and a Tough Math Puzzle 线段树+gcd??奇怪而精妙

    嗯~~,好题... 用线段树维护区间gcd,按如下法则递归:(记题目中猜测的那个数为x,改动次数为tot) 1.若子区间的gcd是x的倍数,不递归: 2.若子区间的gcd是x的倍数,且没有递归到叶子结 ...

  4. [CF914D]Sum the Fibonacci

    题目   点这里看题目. 分析   我们先放宽条件,重新定义五元组\((a,b,c,d,e)\)如下:   1.\(1\le a,b,c,d,e\le n\).   2.\(s_a\&s_b= ...

  5. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  6. Noip 训练指南

    目录 Noip 训练指南 图论 数据结构 位运算 期望 题解 Noip 训练指南 目前完成 \(4 / 72\) 图论 [ ] 跳楼机 [ ] 墨墨的等式 [ ] 最优贸易 [ ] 泥泞的道路 [ ] ...

  7. 在$CF$水题の记录

    CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...

  8. D. Bash and a Tough Math Puzzle 解析(線段樹、數論)

    Codeforce 914 D. Bash and a Tough Math Puzzle 解析(線段樹.數論) 今天我們來看看CF914D 題目連結 題目 給你一個長度為\(n\)的數列\(a\), ...

随机推荐

  1. lr 计算字符串长度

    sizeof求后面的内容or表达式所占用的字节数 strlen求字符串的有效长度,只要遇到'\0'就认为字符串结束 字符串转化为int型变量 Action2() { int j = 0; j = at ...

  2. while循环与getopts处理

  3. go语言从例子开始之Example21.协程

    Go 协程 在执行上来说是轻量级的线程. golang使用协程用go关键字.后边正常调用函数. Example: package main import "fmt" func ak ...

  4. JavaScript常用技巧之进制转换

    一.十进制转二进制 (8).toString(2) 二.二进制转十进制 parseInt("1000",2) 三.获取当前时间戳 // 方法 Date.now() // 对象和操作 ...

  5. 双联通的tarjan算法

    转自:https://www.zhihu.com/question/40746887/answer/88428236 连通分量有三种∶边双连通分量,点双连通分量,强连通分量,前两种属于无向图,后一种属 ...

  6. js console对象

    js调试 根据信息的不同性质,console对象显示信息的方法,分别是一般信息console.log(),console.info().除错信息console.debug().警告提示console. ...

  7. Spring整合SpringDataJpa配置文件头

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  8. 开源实践分享:Ceph bluestore部署实践

    https://blog.51cto.com/99cloud/2119884 Ceph bluestore部署 首先为大家分享Ceph bluestore具体该如何部署,使用环境如下• 单节点• Ce ...

  9. percona-toolkit工具包的安装和初步使用

    percona-toolkit工具包的安装和初步使用 原文地址:http://blog.csdn.net/yumushui/article/details/42919601 一.percona-too ...

  10. mysql全家桶(四)存储过程

    一.存储过程1.介绍简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法: 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以 ...