WA了耶!
查看原帖
WA了耶!
776799
GODTREE楼主2022/11/5 19:25
#include <bits/stdc++.h>
using namespace std;
int in[1000001],bit[1000001];
int lowbit(int x)//查找x二进制中第一个1 
{
	return x&(-x);
}
int sum(int x)
{
   int ans=0;
   while(x!=0)
   {
      ans+=bit[x];
      x-=lowbit(x);
   }
   return ans;
}
int main()
{
	int n,m;
	cin>>n>>m;
	
	for (int i=1;i<=n;i++)//将bit初始化为0 
	{
		bit[i]=0;
	}
	for (int i=1;i<=n;i++)
	{
		cin>>in[i];
		bit[i]+=in[i];
		int j=i;
		while (j<=n)//存入树状数组 
		{
			j+=lowbit(j);
			bit[j]+=in[i];
		}
	}
	for (int i=1;i<=m;i++)
	{
		int b,x,y;
		cin>>b>>x>>y;
		if (b==1)
		{
			bit[x]+=y;
			in[x]+=y;
			int j=x;
			while (j<=n)//修改值 
			{
				j+=lowbit(j);
				bit[j]+=y;
			}
		}
		else
		{
			if (x==y)
			{
				cout<<in[x]<<endl;
				continue;
			}
			cout<<sum(y)-sum(x)<<endl;
		}
	}
	return 0;
} 
2022/11/5 19:25
加载中...