求助万能的luogu
  • 板块学术版
  • 楼主Lovely_Sun
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/23 19:52
  • 上次更新2024/7/23 20:53:15
查看原帖
求助万能的luogu
916760
Lovely_Sun楼主2024/7/23 19:52
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct Node
{
	int l,r,v,d;
}tree[2000005];
int num[500005],cf[500005];
void pushup(Node &u,Node &l,Node &r)
{
	u.v=l.v+r.v;
	u.d=__gcd(l.d, r.d);
}
void pushup(int u)
{
	pushup(tree[u],tree[u<<1],tree[u<<1|1]);
}
void build(int u,int l,int r)
{
	if(l==r)tree[u]={l,r,cf[l],cf[l]};
	else
	{
		tree[u]={l,r};
		int mid=l+r>>1;
		build(u<<1,l,mid);
		build(u<<1|1,mid+1,r);
		pushup(u);
	}
}
int query(int u,int l,int r)
{
	if(tree[u].l>=l&&tree[u].r<=r)
	{
		return tree[u].d;
	}
	else
	{
		int mid=tree[u].l+tree[u].r>>1;
		if(r<=mid)
		{
			return query(u<<1,l,r);
		}
		else if(l>mid)
		{
			return query(u<<1|1,l,r);
		}
		else
		{
			return __gcd(query(u<<1,l,r),query(u<<1|1,l,r));
		}
	}
}
int query2(int u,int l,int r)
{
	if(tree[u].l>=l&&tree[u].r<=r)
	{
		return tree[u].v;
	}
	else
	{
		int mid=tree[u].l+tree[u].r>>1;
		if(r<=mid)
		{
			return query2(u<<1,l,r);
		}
		else if(l>mid)
		{
			return query2(u<<1|1,l,r);
		}
		else
		{
			return query2(u<<1,l,r)+query2(u<<1|1,l,r);
		}
	}
}
void change(int u,int p,int v)
{
	if(tree[u].l==tree[u].r&&tree[u].l==p)
	{
		tree[u].d+=v,tree[u].v+=v;
	}
	else
	{
		int mid=tree[u].l+tree[u].r>>1;
		if(p<=mid)
		{
			change(u<<1,p,v);
		}
		else
		{
			change(u<<1|1,p,v);
		}
		pushup(u);
	}
}
signed main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>num[i];
		cf[i]=num[i]-num[i-1];
	}
	build(1,1,n);
	char flag;
	int x=0,y=0,z=0;
	while(m--)
	{
		cin>>flag>>x>>y;
		if(flag=='C')
		{
			cin>>z;
			change(1,x,z);
			if(y+1<=n)
			{
				change(1,y+1,-z);
			}
		}
		else
		{
			int t=query2(1,1,x);
			cout<<abs(__gcd(t,query(1,x+1,y)))<<"\n";
		}
	}
	return 0;
}

RT

这段代码哪里RE了

n≤5×105n≤5×10^5

m≤105m≤10^5

ai,x≤109a_i,x≤10^9

1≤l≤r≤n1≤l≤r≤n

2024/7/23 19:52
加载中...