AC on #1,#2,求调
查看原帖
AC on #1,#2,求调
767588
_fwTransform_楼主2023/11/14 14:32

rt

#include <bits/stdc++.h>
#define op return
#define AK 0
#define IOI ;
#define ll long long
#define ld long double
#define ull unsigned ll
#define lll __int128
#define pii pair<int,int>
#define pip pair<int,pii>
#define ppp pair<pii,pii>
#define deb cerr<<"op AK IOI\n"
#define tostring(a) #a
#define cono(a,b) a##b
#define psa(i) (i=-~(i))
#define range(i) (-~(i))
#define mid (l+r>>1)
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;

inline ll read()
{
	ll s=0;int w=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')s=(s<<1)+(s<<3)+(ch^'0'),ch=getchar();
	return s*w;
}
void IO()
{
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
}
const int N=1e5+10;int n,len;
ll block[N],maxx[N],a[N],pos[N],idx[N];
void build()
{
	len=sqrt(n);
	for(int i=1;i<=n;psa(i))
	{
		idx[i]=(i-1)/len+1;
		block[idx[i]]+=a[i];
		if(a[i]>maxx[idx[i]])maxx[idx[i]]=a[i],pos[idx[i]]=i;
	}
}
ll query(int l,int r)
{
	r=min(r,n);ll ans=0;
	int p1=idx[l],p2=idx[r];
	if(p1==p2){for(;l<=r;psa(l))ans+=a[l];return ans;}
	for(;l<=p1*len;psa(l))ans+=a[l];
	for(int i=(p2-1)*len+1;i<=r;psa(i))ans+=a[i];
	for(psa(p1);p1!=p2;psa(p1))ans+=block[p1];
	return ans;
}
void update(int l,int r)
{
	r=min(r,n);
	int p1=idx[l],p2=idx[r];
	if(p1==p2)
	{
		if(maxx[p1]==1)return;
		for(int i=l;i<=r;psa(i))
		{
			ll tmp=a[i];
			a[i]=sqrt(a[i]);
			block[p1]-=(tmp-a[i]);
		}
		if(pos[p1]>=l&&pos[p1]<=r)
		{
			maxx[p1]=0;int rlim=min(n,p1*len);
			for(int i=(p1-1)*len+1;i<=rlim;psa(i))
				if(maxx[p1]<a[i])maxx[p1]=a[i],pos[p1]=i;
		}return;
	}
	if(maxx[p1]!=1)
	{
		for(int i=l;i<=p1*len;psa(i))
		{
			ll tmp=a[i];
			a[i]=sqrt(a[i]);
			block[p1]-=(tmp-a[i]);
		}
		if(pos[p1]>=l&&pos[p1]<=p1*len)
		{
			maxx[p1]=0;
			for(int i=(p1-1)*len+1;i<=p1*len;psa(i))
				if(maxx[p1]<a[i])maxx[p1]=a[i],pos[p1]=i;
		}
	}
	if(maxx[p2]!=1)
	{
		for(int i=(p2-1)*len+1;i<=r;psa(i))
		{
			ll tmp=a[i];
			a[i]=sqrt(a[i]);
			block[p2]-=(tmp-a[i]);
		}
		if(pos[p2]>=(p2-1)*len&&pos[p2]<=r)
		{
			maxx[p2]=0;int rlim=min(n,p2*len);
			for(int i=(p2-1)*len+1;i<=rlim;psa(i))
				if(maxx[p2]<a[i])maxx[p2]=a[i],pos[p2]=i;
		}
	}
	for(psa(p1);p1!=p2;psa(p1))
	{
		maxx[p1]=sqrt(maxx[p1]);
		if(maxx[p1]==1){block[p1]=len;continue;}
		for(int i=(p1-1)*len+1;i<=p1*len;psa(i))
		{
			ll tmp=a[i];
			a[i]=sqrt(a[i]);
			block[p1]-=(tmp-a[i]);
		}
	}
}
signed main()
{
	n=read();
	for(int i=1;i<=n;psa(i))a[i]=read();
	build();int q=read(),opt,l,r;
	while(q--)
	{
		opt=read(),l=read(),r=read();
		if(l>r)swap(l,r);
		if(opt)printf("%lld\n",query(l,r));
		else update(l,r);
//		for(int i=1;i<=idx[n];psa(i))printf("%d\n",block[i]);
	}
	op AK IOI
}

@YaeMiko_ @mashduihca @syta @operator_ @sjbbszgyd @Qian_xscc @OcTar @h_rains @Yokki @dogjuan @waauto

2023/11/14 14:32
加载中...