分块50pts WA on #6~10 悬关
查看原帖
分块50pts WA on #6~10 悬关
1284582
F_L_Bird楼主2025/1/22 21:54
#include<iostream>
#include<cmath>
using namespace std;

const int SQRT_N = sqrt(100000);
long long n,m,belong[100005],bg[SQRT_N + 5],ed[SQRT_N + 5];
long long sum[SQRT_N + 5],a[100005];

inline void modify_sqrt(int l,int r){
	if(belong[l] == belong[r])
	{
		for(int i = l;i <= r;i += 1)
		{
			sum[belong[r]] -= a[i];
			a[i] = sqrt(a[i]);
			sum[belong[r]] += a[i];
		}
	}
	else
	{
		for(int i = belong[l] + 1;i <= belong[r] - 1;i += 1)
		{
			if(sum[i] == ed[i] - bg[i] + 1)
			{
				continue;
			}
			else
			{
				sum[i] = 0;
				for(int j = bg[i];j <= ed[i];j += 1)
				{
					a[j] = sqrt(a[j]);
					sum[i] += a[j];
				}
			}
		}
		for(int i = l;i <= ed[belong[l]];i += 1)
		{
			sum[belong[i]] -= a[i];
			a[i] = sqrt(a[i]);
			sum[belong[i]] += a[i];
		}
		for(int i = bg[belong[r]];i <= r;i += 1)
		{
			sum[belong[i]] -= a[i];
			a[i] = sqrt(a[i]);
			sum[belong[i]] += a[i];
		}
	}
	return;
}

inline int query_sum(int l,int r){
	long long res = 0;
	if(belong[l] == belong[r])
	{
		for(int i = l;i <= r;i += 1)
		{
			res += a[i];
		}
		return res;
	}
	else
	{
		for(int i = l;i <= ed[belong[l]];i += 1)
		{
			res += a[i];
		}
		for(int i = belong[l] + 1;i <= belong[r] - 1;i += 1)
		{
			res += sum[i];
		}
		for(int i = bg[belong[r]];i <= r;i += 1)
		{
			res += a[i];
		}
		return res;
	}
	return 0;
}

int main(){
	//freopen("a1.in","r",stdin);
	//freopen("a1.ans","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	m = sqrt(n);
	for(int i = 1;i <= n;i += 1)
	{
		cin>>a[i];
	}
	for(int i = 1;i <= m;i += 1)
	{
        bg[i] = n / m * (i - 1) + 1;
		ed[i] = (i != m ? n / m * i : n);
		for(int j = bg[i];j <= ed[i];j += 1)
		{
			belong[j] = i;
			sum[i] += a[j];
		}
	}
	int opt,l,r,q;
	cin>>q;
	for(int i = 1;i <= q;i += 1)
	{
		cin>>opt>>l>>r;
		if(l > r)
		{
			swap(l,r);
		}
		if(opt == 0)
		{
			modify_sqrt(l,r);
		}
		else if(opt == 1)
		{
			cout<<query_sum(l,r)<<'\n';
		}
	}
	return 0;
}

这个代码 LOJ 的测试改改输入输出可以过,但是丢过来用不了,long long 开了,lrl \ge r 也处理了。实在不知道错哪了,求神犇调调 QAQ

2025/1/22 21:54
加载中...