社区讨论
!我入侵了外星人的电脑,导致外星人的P9989代码WA,求大佬求调
灌水区参与者 4已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @lzajv1h4
- 此快照首次捕获于
- 2024/08/01 08:40 2 年前
- 此快照最后确认于
- 2024/08/01 10:17 2 年前
rt,WA 35pts
CPP#include<bits/stdc++.h>
using namespace std;
#define int __int128
const int maxn = 2e5+5;
int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,a[maxn];
struct Tree{int l,r,sum,lcm;}t[maxn<<2];
void pushup(int u){
t[u].sum=t[u<<1].sum+t[u<<1|1].sum;
t[u].lcm=min((int)2e18,t[u<<1].lcm*t[u<<1|1].lcm/__gcd(t[u<<1].lcm,t[u<<1|1].lcm));
}
void build(int u,int l,int r){
t[u].l=l,t[u].r=r;
if(l==r){t[u].sum=t[u].lcm=a[l];return;}
int mid=l+r>>1;
build(u<<1,l,mid),build(u<<1|1,mid+1,r);
pushup(u);
}
void modify(int u,int l,int r,int x){
if(!(x%t[u].lcm))return;
if(t[u].l==t[u].r){t[u].sum=t[u].lcm=__gcd(t[u].lcm,x);return;}
int mid=t[u].l+t[u].r>>1;
if(l<=mid)modify(u<<1,l,r,x);
if(r>mid)modify(u<<1|1,l,r,x);
pushup(u);
}
long long query(int u,int l,int r){
if(l<=t[u].l&&t[u].r<=r)return t[u].sum;
long long res=0,mid=t[u].l+t[u].r>>1;
if(l<=mid)res+=query(u<<1,l,r);
if(r>mid)res+=query(u<<1|1,l,r);
return res;
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++)a[i]=read();
build(1,1,n);
for(int i=1,op,l,r,x;i<=m;i++){
op=read();
if(op==1)l=read(),r=read(),x=read(),modify(1,l,r,x);
else l=read(),r=read(),printf("%lld\n",query(1,l,r));
}
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...