题意:一个长度为n的序列,T个询问,2种询问1 l r x问[l, r]区间内替换一个数能不能使得gcd[l, r] == x,输出yes和no,2 l x序列第l个数替换为x

题解:区间询问,单点需修改,线段树,算出区间有t个数不是x的倍数,t>1输出no

#include <bits/stdc++.h>
#define maxn 501000
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
int gcd[maxn*4];
void pushup(int x){gcd[x] = __gcd(gcd[x<<1], gcd[x<<1|1]);
}
void build(int l,int r,int x){if(l == r){scanf("%d", &gcd[x]);return ;}int mid = (l+r)>>1;build(l, mid, x<<1);build(mid+1, r, x<<1|1);pushup(x);
}
void update(int l,int r,int x,int t, int c){if(l == r){gcd[x] = c;return ;}int mid = (l+r)>>1;if(t<=mid) update(l, mid, x<<1, t, c);else update(mid+1, r, x<<1|1, t, c);pushup(x);
}
int query(int l,int r,int x,int L,int R,int g){if(l == r){return gcd[x]%g?1:0;}if(L>=l && R<=r&&gcd[x]%g == 0) return 0;int mid = l+r>>1;if(mid < L) return query(mid+1, r, x<<1|1, L, R, g);else if(mid >= R) return query(l, mid, x<<1, L, R, g);else{int b1 = query(l, mid, x<<1, L, mid, g);if(b1 >= 2) return 2;int b2 = query(mid+1, r, x<<1|1, mid+1, R, g);return b1+b2;}
}
int main(){int n, t, a, l ,r, x;cin>>n;build(1, n, 1);scanf("%d", &t);while(t--){scanf("%d", &a);if(a == 1){scanf("%d%d%d", &l, &r, &x);if(query(1, n, 1, l, r, x) <= 1) printf("YES\n");else printf("NO\n");}else {scanf("%d%d", &l, &x);update(1, n, 1, l, x);}}return 0;
}

转载于:https://www.cnblogs.com/Noevon/p/8328548.html

Codeforces914D Bash and a Tough Math Puzzle相关推荐

  1. Codecraft-18 and Codeforces Round #458: D. Bash and a Tough Math Puzzle(线段树)

    D. Bash and a Tough Math Puzzle time limit per test 2.5 seconds memory limit per test 256 megabytes ...

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

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

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

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

  4. 【Codeforces Round #458 D.Bash and a Tough Math Puzzl】线段树

    链接 Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) 题意 给你一个区间,要支持两种区间操作. 第一种操作是单点更 ...

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

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

  6. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  7. CF 线段树 gcd改变

    Bash and a Tough Math Puzzle 可以过100的数据 但是50w就过不了了,具体不明,没看过题解. 没加第二种情况的返回值.. #include <iostream> ...

  8. 蒙特卡洛能解决啥_用蒙特卡洛方法解决“无法解决”的问题

    蒙特卡洛能解决啥 How do you solve an 'unsolvable' problem? 您如何解决"无法解决"的问题? The worlds of data scie ...

  9. 100 Most Brilliant Tech Hacks You Need To Know Right Now

    原来我发在115社区,现在搬运过来. http://115.com/22500407/post/edit?tid=74122 100 Most Brilliant Tech Hacks You Nee ...

最新文章

  1. MPLS *** 高级教程(张洋讲解演示版)
  2. 遍历系统中所有的进程,可根据名字或ID查找某一个线程
  3. input val >=zero input_val <=one
  4. Android 事件分发,分发机制
  5. 复数可以阐释的如此优雅
  6. JAVA—HTTP客户端警告:Going to buffer response body of large or unknown size.
  7. 输入语句 readline 1006 c#
  8. IntelliJ IDEA 激活
  9. 电脑C盘的大小影响电脑正常使用吗?
  10. 线性代数中的克莱姆法则与几何解释
  11. 推荐子龙山人的emacs的教程
  12. javascript连接数据库
  13. 【技巧】pytorch tif转成jpg
  14. 关闭QQ弹出的腾讯网迷你版
  15. Android使用VAD检测是否说话
  16. 使用Arduino UNO以及好盈电调控制无刷电机
  17. Jmeter性能测试简单示例
  18. Family Show 3.0分析(一)项目文件结构分析
  19. python将日期分隔成单独的年月日时分列
  20. android6.0在状态栏添加一键截屏

热门文章

  1. Linux下安装golang
  2. Android开发笔记(一百六十五)利用红外发射遥控电器
  3. iOS 修改webView字体
  4. LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对
  5. 19. Python 类的重写   类的私有变量和私有方法
  6. xxx is not in the sudoers file 解决方案(转)
  7. 行走在消失中的五种编程语言
  8. windows 10 80端口占用处理方法_已迁移
  9. 推荐几本jquery书
  10. 系统架构师-基础到企业应用架构系列之--开卷有益