改一下数据
查看原帖
改一下数据
731164
yangfeifan2009楼主2024/7/24 11:50

建议更改数据

数据规模与约定

对于 30% 的数据:N<=8,M<=10;

对于 70% 的数据:N<=10000,M<=10000;

对于 100% 的数据:1<=N,M<=500000

不然乱写就过了

在另一个网站上超时

当然也有可能是我菜

代码如下~~(帮我优化一下就更好了)~~

#include<bits/stdc++.h>
using namespace std;

struct SegmentTree
{
	int Left,Right;
	int data;
}t[1500000];
int a[500000];
void BuildTree(int p,int Left,int Right)
{
	t[p].Left=Left;
	t[p].Right=Right;
	if (Left==Right)
	{
		t[p].data=a[Left];
	} 
	else
	{
		int mid=(Left+Right)/2;
		BuildTree(p*2,Left,mid);
		BuildTree(p*2+1,mid+1,Right);
		t[p].data=t[p*2].data+t[p*2+1].data;
	}
}

int Ask(int p,int Left,int Right)
{
	if (Left<=t[p].Left && Right>=t[p].Right) return t[p].data;
	int mid=(t[p].Left+t[p].Right)/2;
	int ans=0;
	if (Left<=mid) ans=ans+Ask(p*2,Left,Right);
	if (Right>mid) ans=ans+Ask(p*2+1,Left,Right);
	return ans; 
}

void Change_Value(int p,int x,int value)
{
	if (t[p].Left==t[p].Right)
	{
	    t[p].data+=value;
	}
	else
	{
	    int mid=(t[p].Left+t[p].Right)/2;
	    if (x<=mid) Change_Value(p*2,x,value);
	    else Change_Value(p*2+1,x,value);
	    t[p].data=t[p*2].data+t[p*2+1].data;
	}
}

int main()
{
	int l,n;
	cin>>l>>n;
	for(int i=1;i<=l;i++)
	{
		cin>>a[i];
	}
	BuildTree(1,1,l);
	for(int i=0;i<n;i++)
	{
		int j,k,r;
		cin>>j>>k>>r;
		if(j==1)
		{
			Change_Value(1,k,r);
		}
		else
		{
			cout<<Ask(1,k,r)<<endl;
		}
	}
	return 0;
}
2024/7/24 11:50
加载中...