codeforces 914 D Bash and a Tough Math Puzzle
2024-08-31 11:34:07
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=;
int n,a[N],m;
struct tree{
int l,r,gcd;
}tr[N*];
int gcd(int x,int y){
if(y==)return x;
else return gcd(y,x%y);
}
void build(int l,int r,int now){
tr[now].l=l;tr[now].r=r;
if(l==r){
tr[now].gcd=a[l];
return;
}
int mid=(l+r)>>;
build(l,mid,now*);
build(mid+,r,now*+);
tr[now].gcd=gcd(tr[now*].gcd,tr[now*+].gcd);
}
void change(int x,int y,int now){
// cout<<tr[now].l<<" "<<tr[now].r<<" "<<x<<endl;
if(tr[now].l==x&&tr[now].r==x){
tr[now].gcd=y;
return ;
}
int mid=(tr[now].l+tr[now].r)>>;
if(x>mid)change(x,y,now*+);
else change(x,y,now*);
tr[now].gcd=gcd(tr[now*].gcd,tr[now*+].gcd);
}
int check(int l,int r,int x,int now){
if(tr[now].gcd%x==)return ;
if(tr[now].l==l&&tr[now].r==r){
if(l==r)return ;
if(tr[now*].gcd%x==)return check(tr[now*+].l,tr[now*+].r,x,now*+);
if(tr[now*+].gcd%x==)return check(tr[now*].l,tr[now*].r,x,now*);
return ;
}
int mid=(tr[now].l+tr[now].r)>>;
if(l>mid)return check(l,r,x,now*+);
else if(r<=mid)return check(l,r,x,now*);
else{
return check(l,mid,x,now*)+check(mid+,r,x,now*+);
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
build(,n,);
scanf("%d",&m);
for(int i=;i<=m;i++){
int k;
scanf("%d",&k);
if(k==){
int l,r,x;
scanf("%d%d%d",&l,&r,&x);
if(check(l,r,x,)<=)printf("YES\n");
else printf("NO\n");
}
else{
int x,y;
scanf("%d%d",&x,&y);
change(x,y,);
}
}
return ;
}
题意
•给出一段序列(1≤n≤5*105),两个操作(1≤q≤4*105)
•操作1 给出l,r,x
•求区间l-r的gcd,如果至多能改掉区间内的一个数,使gcd是x的倍数,那么输出YES,否则输出NO
•操作2 给出pos,x
•将序列中pos位置上的数字改为x
题解
线段树,维护区间的gcd
因为题目询问删除一个数,我们把整个区间分成两块,如果两边的gcd都是x的倍数显然是可以的,如果都不是gcd的倍数,就不行了,因为使两个gcd的gcd为x的倍数,这两个gcd应该都至少含有x因子。如果一个gcd是x的倍数,一个不是,那就递归处理不是的那个区间。
最新文章
- c#解析xml
- android 中theme和style的语法相关
- VS2012中,C# 配置文件读取 + C#多个工程共享共有变量 + 整理using语句
- eclipse中新建python项目报错:Project interpreter not specified
- android 三种弹出框之一PopupWindow
- 第一次使用easyUI
- ZOJ 3209 Treasure Map (Dancing Links)
- 导出Unity场景为配置文件
- boost------signals2的使用2(Boost程序库完全开发指南)读书笔记
- MES项目参观交流会
- Measuring &; Optimizing I/O Performance
- LeetCode 120. Triangle (三角形)
- react-router v4中 HashRouter 和 BrowserRouter的使用
- 转载记录一个有效的jetbrains激活码
- python----多继承C3算法
- springboot项目打包部署在指定的tomcat容器中
- AtCoder Grand Contest 025 B - RGB Coloring
- 1-find
- Codeforces 1093 简要题解
- 第十四个目标 (fzu)