Codeforces914D Bash and a Tough Math Puzzle
题意:一个长度为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相关推荐
- 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 ...
- Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD
题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整 ...
- cf914D. Bash and a Tough Math Puzzle(线段树)
题意 题目链接 Sol 直接在线段树上二分 当左右儿子中的一个不是\(x\)的倍数就继续递归 由于最多递归到一个叶子节点,所以复杂度是对的 开始时在纠结如果一段区间全是\(x\)的两倍是不是需要特判, ...
- 【Codeforces Round #458 D.Bash and a Tough Math Puzzl】线段树
链接 Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) 题意 给你一个区间,要支持两种区间操作. 第一种操作是单点更 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- Codeforces 题目合集+分类+代码 【Updating...】【361 in total】
961A - Tetris 模拟 ...
- CF 线段树 gcd改变
Bash and a Tough Math Puzzle 可以过100的数据 但是50w就过不了了,具体不明,没看过题解. 没加第二种情况的返回值.. #include <iostream> ...
- 蒙特卡洛能解决啥_用蒙特卡洛方法解决“无法解决”的问题
蒙特卡洛能解决啥 How do you solve an 'unsolvable' problem? 您如何解决"无法解决"的问题? The worlds of data scie ...
- 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 ...
最新文章
- MPLS *** 高级教程(张洋讲解演示版)
- 遍历系统中所有的进程,可根据名字或ID查找某一个线程
- input val >=zero input_val <=one
- Android 事件分发,分发机制
- 复数可以阐释的如此优雅
- JAVA—HTTP客户端警告:Going to buffer response body of large or unknown size.
- 输入语句 readline 1006 c#
- IntelliJ IDEA 激活
- 电脑C盘的大小影响电脑正常使用吗?
- 线性代数中的克莱姆法则与几何解释
- 推荐子龙山人的emacs的教程
- javascript连接数据库
- 【技巧】pytorch tif转成jpg
- 关闭QQ弹出的腾讯网迷你版
- Android使用VAD检测是否说话
- 使用Arduino UNO以及好盈电调控制无刷电机
- Jmeter性能测试简单示例
- Family Show 3.0分析(一)项目文件结构分析
- python将日期分隔成单独的年月日时分列
- android6.0在状态栏添加一键截屏