求助,被水题切了
  • 板块灌水区
  • 楼主Gaochenxi103_QWQ
  • 当前回复14
  • 已保存回复14
  • 发布时间2024/4/25 23:08
  • 上次更新2024/5/31 12:29:40
查看原帖
求助,被水题切了
717476
Gaochenxi103_QWQ楼主2024/4/25 23:08

Link

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e7+10;
struct node{
	int l,r,sum;
}tree[4*N];
int a[N],n,m;

void build_lintree(int root,int l,int r)
{
	tree[root].l=l,tree[root].r=r;
	if(l==r)
	{
		tree[root].sum=a[l];
		return ;
	}
	int mid=(l+r)/2;
	build_lintree(root*2,l,mid);
	build_lintree(root*2+1,mid+1,r);
	tree[root].sum=tree[root*2].sum+tree[root*2+1].sum;
//	cout<<l<<" "<<r<<" "<<tree[root].sum<<"\n";
}
void updata(int root,int x,int k)
{
	if(tree[root].l==tree[root].r )
	{
		tree[root].sum+=k;
		return ;
	}
	int mid=(tree[root].l+tree[root].r)/2;
	if(x<=mid)
	{
		updata(root*2,x,k);
	}
	else
	{
		updata(root*2+1,x,k);
	}
	tree[root].sum=tree[root*2].sum+tree[root*2+1].sum;
}

int query(int root,int l,int r)
{
	if(tree[root].l>=l && tree[root].r<=r)
	{
		return tree[root].sum;
	}
	int mid=(tree[root].l+tree[root].r)/2,ans=0;
	if(l<=mid)
	{
		ans+=query(root*2,l,r);
	}
	if(r>mid)
	{
		ans+=query(root*2+1,l,r);
	}
	return ans;
}
signed main() {
	ios::sync_with_stdio(0);
	cout.tie(0);
	cin.tie(0);
	
    cin>>n;
	for(int i=1;i<=n;i++)
	{
		a[i]=i;
	}
	build_lintree(1,1,n);
	for(int i=1;i<=n;i++)
	{
	    printf("%lld\n",query(1,1,i));
	}
	return 0;
}

MLE

2024/4/25 23:08
加载中...