树状数组求助
  • 板块P2357 守墓人
  • 楼主hpcwdclcx
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/7/20 23:05
  • 上次更新2023/11/6 22:43:10
查看原帖
树状数组求助
213107
hpcwdclcx楼主2020/7/20 23:05

35分欸,我太弱了/kk

#include<bits/stdc++.h>
using namespace std;
long long e[100010],n,m,a,b,c,p;
int lowbit(int k)
{
	return k&(-k);
}
void adde(int pos,int x)
{
	for(int i=pos;i<=n;i+=lowbit(i))e[i]+=x;
}
int rhodes(int x)
{
	int bt=0;
	for(int i=x;i>0;i-=lowbit(i))bt+=e[i];
	return bt;
}
int fs(int x)
{
	int hb=0;
	for(int i=1;i<=x;i++)hb+=rhodes(i);
	return hb;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a;
		adde(i,a);
		adde(i+1,-a);
	}
	for(int i=1;i<=m;i++)
	{
		cin>>p;
		if(p==1)
		{
			cin>>a>>b>>c;
			adde(a,c);
			adde(b+1,-c);
		}
		if(p==2)
		{
			cin>>a;
			adde(1,a);
			adde(2,-a);
		}
		if(p==3)
		{
			cin>>a;
			adde(1,-a);
			adde(2,a);
		}
		if(p==4)
		{
			cin>>a>>b;
			cout<<fs(b)-fs(a-1)<<endl;
		}
		if(p==5)cout<<rhodes(1)<<endl;
	}
	return 0;
}

违规自删

2020/7/20 23:05
加载中...