社区讨论

萌新刚学OI1.114ms90pts求条qwq

B2001入门测试题目参与者 8已保存回复 16

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
15 条
当前快照
1 份
快照标识符
@lzs40q8a
此快照首次捕获于
2024/08/13 15:37
2 年前
此快照最后确认于
2024/08/13 17:11
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int a[N], n, m, tag[4*N], tree[4*N], mod=1e18, mul[4*N];
void pushup(int cur)
{
	tree[cur]=tree[cur*2]%mod+tree[cur*2+1]%mod;
	return ;
}
void addtag(int cur, int lt, int rt, int val)
{
	tag[cur]+=val;
	tree[cur]+=(rt-lt+1)*val%mod;
	return ; 	
}
void addtag1(int cur, int lt, int rt, int val)
{
	tag[cur]=tag[cur]*val%mod;
	mul[cur]=mul[cur]*val%mod;
	tree[cur]=tree[cur]*val%mod;
	return ;
}
void pushdown(int cur, int lt, int rt)
{
	if(tag[cur]==0&&mul[cur]==1)
	{
		return ;
	}
	int mid=(lt+rt)>>1;
	addtag1(cur*2,lt,mid,mul[cur]);
	addtag1(cur*2+1,mid+1,rt,mul[cur]);
	addtag(cur*2,lt,mid,tag[cur]);
	addtag(cur*2+1,mid+1,rt,tag[cur]);
	tag[cur]=0;
	mul[cur]=1;
	return ;
} 
void build(int cur, int lt, int rt)
{
	if(lt==rt)
	{
		tree[cur]=a[lt];
		return ;
	}
	int mid=lt+rt>>1;
	build(cur*2,lt,mid);
	build(cur*2+1,mid+1,rt);
	pushup(cur);
	return ;
}
int query(int cur, int lt, int rt, int qx, int qy)
{
	if(qy<lt||qx>rt)
	{
		return 0;
	}
	if(qx<=lt&&rt<=qy)
	{
		return tree[cur];
	}
	pushdown(cur,lt,rt);
	int mid=lt+rt>>1;
	return query(cur*2,lt,mid,qx,qy)+query(cur*2+1,mid+1,rt,qx,qy);
}
void update(int cur, int lt, int rt, int qx, int qy, int val)
{
	if(qy<lt||qx>rt)
	{
		return ;
	}
	if(qx<=lt&&rt<=qy)
	{
		addtag(cur,lt,rt,val);
		return ;
	}
	pushdown(cur,lt,rt);
	int mid=lt+rt>>1;
	update(cur*2,lt,mid,qx,qy,val);
	update(cur*2+1,mid+1,rt,qx,qy,val);
	pushup(cur);
	return ;
}
void update1(int cur, int lt, int rt, int qx, int qy, int val)
{
	if(qy<lt||qx>rt)
	{
		return ;
	}
	if(qx<=lt&&rt<=qy)
	{
		addtag1(cur,lt,rt,val);
		return ;
	}
	pushdown(cur,lt,rt);
	int mid=lt+rt>>1;
	update1(cur*2,lt,mid,qx,qy,val);
	update1(cur*2+1,mid+1,rt,qx,qy,val);
	pushup(cur);
	return ;
}
signed main()
{
	cin>>n>>m;
	a[1]=n,a[2]=m;
	for(int i=1;i<=100005;i++)
	{
		mul[i]=1;
	}
	build(1,1,2);
	update1(1,1,2,1,2,1);
	cout<<query(1,1,2,1,2);
	return 0;
}
调1s了qwq

回复

16 条回复,欢迎继续交流。

正在加载回复...