大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:
C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。
Q l r,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。
对于每个询问,输出一个整数表示答案。
输入格式
第一行两个整数 N,M。
第二行 N 个整数 A[i]。
接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。
输出格式
对于每个询问,输出一个整数表示答案。
每个答案占一行。
数据范围
N≤500000,M≤100000,
1≤A[i]≤1018,
|d|≤1018
输入样例:
5 5
1 3 5 7 9
Q 1 5
C 1 5 1
Q 1 5
C 3 3 6
Q 2 4
输出样例:
1
2
4
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e5 + 10;
#define lson u << 1
#define rson u << 1 | 1
struct Node{
int l,r;
ll gcd,sum;
}trie[N * 4];
ll a[N],d[N];
int gcd(int a,int b){
return b == 0 ? a : gcd(b, a % b);
}
void pushup(int u){
trie[u].sum = trie[lson].sum + trie[rson].sum;
trie[u].gcd = gcd(trie[lson].gcd,trie[rson].gcd);
}
void build(int u,int l,int r){
if(l == r)trie[u] = {
l,r,d[l],d[l]};
else{
trie[u] = {
l,r};
int mid = (l + r) >> 1;
build(lson,l,mid);
build(rson,mid + 1,r);
pushup(u);
}
}
void modify(int u,int x,ll y){
if(trie[u].l == x && trie[u].r == x)trie[u].sum += y,trie[u].gcd += y;
else{
int mid = (trie[u].l + trie[u].r) >> 1;
if(x <= mid)modify(lson,x,y);
else modify(rson,x,y);
pushup(u);
}
}
Node query(int u,int l,int r){
if(trie[u].l >= l && trie[u].r <= r){
Node t;
t.sum = trie[u].sum;
t.gcd = trie[u].gcd;
return t;
}
int mid = (trie[u].l + trie[u].r) >> 1;
if(r <= mid)return query(lson,l,r);
else if(l > mid)return query(rson,l,r);
else{
auto left = query(lson,l,r),right = query(rson,l,r);
Node t;
t.sum = left.sum + right.sum;
t.gcd = gcd(left.gcd,right.gcd);
return t;
}
}
int main(){
int n,m;
cin>>n>>m;
ios::sync_with_stdio(false);
for(int i = 1;i <= n;i ++){
cin>>a[i];
d[i] = a[i] - a[i - 1];
}
build(1,1,n + 1);
char t;
ll x,y,dd;
for(int i = 0;i < m;i ++){
cin>>t>>x>>y;
if(t == 'C')cin>>dd;
if(x > y)swap(x,y);
if(t == 'C'){
modify(1,x,dd);
modify(1,y + 1,-dd);
}
else{
auto left = query(1,1,x),right = query(1,x + 1,y);
cout<<gcd(left.sum,right.gcd)<<endl;
}
}
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168603.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...