loj分块入门1(0分球条)
  • 板块学术版
  • 楼主d909RCA
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/12/17 21:50
  • 上次更新2023/12/18 13:08:53
查看原帖
loj分块入门1(0分球条)
703115
d909RCA楼主2023/12/17 21:50
#include<bits/stdc++.h> 
using namespace std;
//#define int long long
int n,a[1000009],pl[1000009],v[1000009];
void upd(int l,int r,int c)
{
    for(int i=l;i<=min(pl[l]*(int)sqrt(n),r);i++)
    {
		a[i]+=c;
	}
    if(pl[l]!=pl[r])
    {
        for(int i=(pl[r]-1)*sqrt(n)+1;i<=r;i++)
        {
			a[i]+=c;
		}
	}
    for(int i=pl[l]+1;i<=pl[r]-1;i++)
    {
		v[i]+=c;
	}
}
signed main()
{
    cin>>n;
    for(int i=1;i<=n;i++) 
    {
		cin>>a[i];
	}
    for(int i=1;i<=n;i++) 
    {
		pl[i]=(i-1)/sqrt(n)+1;
	}
    for(int i=1;i<=n;i++)
	{
        int op,l,r,c;
        cin>>op>>l>>r>>c;
        if(!op) upd(l,r,c);
        else cout<<a[r]+v[pl[r]]<<endl;
    }
	return 0;
}
2023/12/17 21:50
加载中...