求大佬评价一下码风
  • 板块灌水区
  • 楼主small_moon
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/1 17:22
  • 上次更新2024/8/1 18:35:06
查看原帖
求大佬评价一下码风
1115392
small_moon楼主2024/8/1 17:22

rt

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
ll read();
struct Node{
	ll v,left,right,tag;
}t[N*4];
int n,q;
ll v[N];
void pushup(ll k)
{
	t[k].v=t[k*2].v+t[k*2+1].v;
}
void f(ll k,ll v)
{
	t[k].v+=(t[k].right-t[k].left+1)*v;
	t[k].tag+=v;
}
void pushdown(ll k)
{
	f(k*2,t[k].tag);
	f(k*2+1,t[k].tag);
	t[k].tag=0;
}
void build(ll k,ll l,ll r)
{
	t[k].left=l; t[k].right=r; t[k].tag=0;
	if(l==r)
	{
		t[k].v=v[l];
		return;
	}
	ll mid=l+r>>1;
	build(k*2,l,mid); build(k*2+1,mid+1,r);
	pushup(k);
}
void update(ll k,ll l,ll r,ll v)
{
	if(t[k].left>=l && t[k].right<=r)
	{
		f(k,v);
		return;
	}
	pushdown(k);
	ll mid=t[k].left+t[k].right>>1;
	if(l<=mid) update(k*2,l,r,v);
	if(r>mid) update(k*2+1,l,r,v);
	pushup(k);
}
ll query(ll k,ll l,ll r)
{
	if(t[k].left>=l && t[k].right<=r) return t[k].v;
	pushdown(k);
	ll mid=t[k].left+t[k].right>>1,ret=0;
	if(l<=mid) ret+=query(k*2,l,r);
	if(r>mid) ret+=query(k*2+1,l,r);
	return ret;
}
int main()
{
	n=read(); q=read();
	for(int i=1;i<=n;i++) v[i]=read();
	build(1,1,n);
	for(int i=1;i<=q;i++)
	{
		ll opt=read();
		if(opt==1)
		{
			ll l=read(),r=read(),k=read();
			update(1,l,r,k);
		}
		if(opt==2)
		{
			ll k=read();
			update(1,1,1,k);
		}
		if(opt==3)
		{
			ll k=read();
			update(1,1,1,-k);
		}
		if(opt==4)
		{
			ll l=read(),r=read();
			cout<<query(1,l,r)<<endl;
		}
		if(opt==5)
			cout<<query(1,1,1)<<endl;
	}
	return 0;
}
ll read()
{
	ll x=0,f=1; char ch=getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
2024/8/1 17:22
加载中...