社区讨论

!我入侵了外星人的电脑,导致外星人的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 条回复,欢迎继续交流。

正在加载回复...