找不同
  • 板块灌水区
  • 楼主renjiLD
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/10/4 21:03
  • 上次更新2024/10/5 00:37:23
查看原帖
找不同
476014
renjiLD楼主2024/10/4 21:03
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,q;
long long a[N],tr[N];
inline int lowbit(int x)
{
	return x & -x;
} 
void add(int x,int c)
{
	for(int i = x; i <= n; i += lowbit(i)) tr[i] += c;
}
long long sum(int x)
{
	long long res=0;
	for(int i=x;i;i-=lowbit(i)) res+=tr[i];
	return res;
}
int main()
{
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);	
	}
	for(int i = 1; i <= n; i ++)
		add(i, a[i] - a[i - 1]);
	while(q--)
	{
		int cz;
		scanf("%d",&cz);
		if(cz==1)
		{
			int l,r,x;
			scanf("%d%d%d",&l,&r,&x);
			add(l,x);
			add(r + 1,-x);
		}
		else
		{
			int i;
			scanf("%d",&i);
			printf("%lld\n",sum(i));
		}
	}
	return 0;
}


#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int a[N],n,q,tr[N];
inline int lowbit(int x)
{
	return x & -x;
}
void add(int x,int c)
{
	for(int i=x;i<=n;i+=lowbit(i))	tr[i]+=c;
}
int sum(int x)
{
	int res=0;
	for(int i=x;i;i-=lowbit(i))	res+=tr[i];
	return res;
}
signed main()
{
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;i++)	cin>>a[i];
	for(int i=1;i<=n;i++)	add(i,a[i]-a[i-1]);
	while(q--)
	{
		int sg;
		cin>>sg;
		int l,r,x;
		if(sg==1)
		{
			cin>>l>>r>>x;
			add(l,x);
			add(r+1,-x);
		}
		else
		{
			int i;
			cin>>i;
			cout<<sum(i)<<endl;
		}
	}
}
2024/10/4 21:03
加载中...