性感代码re(部分)在线求调,玄关
查看原帖
性感代码re(部分)在线求调,玄关
1088663
zzzyyyyhhhhh楼主2024/7/15 21:51

12pts,快读已略

#include"bits/stdc++.h"
using namespace std;
typedef long long ll;
const int N = 2e5+100,M=5e5;
struct vectorr
{
	int *p;
	int siz,maxsiz;
	vectorr()
	{
		p=(int*)malloc(sizeof(int)*10);
		maxsiz=10;
	}
	inline void nnew()
	{
		int *p1=p;
		p=(int*)malloc(sizeof(int)*maxsiz<<2ll);
		maxsiz<<=2ll;
		memcpy(p,p1,siz*sizeof(int));
		free(p1);
	}
	inline void push_back(int x)
	{
		if(siz+1>=maxsiz)
		{
			nnew();
		}
		p[siz++]=x;
	}
	inline int& operator[](int x)
	{
		if(x>=siz)return siz;
		return p[x];
	}
	inline void era()
	{
		if(siz==0)return;
		siz--;
	}
};
vectorr yin[(int)5e5+100];
inline void fuckkachangti()
{
	for(int i=2;i<=M;i++)
	{
		for(int j=1;j*i<=M;j++)
		{
			yin[j*i].push_back(i);
		}
	}
}
inline int lowbit(int x)
{
	return x&-x;
}
int n,m;
vectorr pos[M],nxt[M];
int in[N];
inline int nnext(int x,int y)
{
	if(y>=nxt[x].siz)return y+1;
	if(nxt[x][y]!=y)return nxt[x][y]=nnext(x,nxt[x][y]);
	return y;
}
inline void init()
{
	fuckkachangti();
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<yin[in[i]].siz;j++)
		{
			pos[yin[in[i]][j]].push_back(i);
			nxt[yin[in[i]][j]].push_back(nxt[yin[in[i]][j]].siz);
			// cout<<yin[in[i]][j]<<' '<<nxt[yin[in[i]][j]].siz<<' '<<nxt[yin[in[i]][j]][nxt[yin[in[i]][j]].siz-1]<<'\n';
		}
	}
}
ll t[N*4];
inline void add(int x,int k)
{
	for(int i=x;i<=n;i+=lowbit(i))
	{
		t[i]+=k;
	}
}
ll find(int l,int r)
{
	ll res=0;
	for(int i=l-1;i;i-=lowbit(i))res-=t[i];
	for(int i=r;i;i-=lowbit(i))res+=t[i];
	return res;
}
inline void less1(int l,int r,int k)
{
	// cout<<i<<"a "<<pos[k][i]<<'\n',,cout<<i<<'\n'
	for(int i=0;i<pos[k].siz&&pos[k][i]<=r;i=nnext(k,i+1))
	{

		if(pos[k][i]<l)continue;
		if(in[pos[k][i]]%k==0)
		add(pos[k][i],-in[pos[k][i]]),
		in[pos[k][i]]/=k,
		add(pos[k][i],in[pos[k][i]]);
		if(i)
			if(nxt[k][i-1]<nnext(k,i+1))
				nxt[k][i-1]=nnext(k,i+1);
	}
}
inline void out()
{
	cout<<"st\n";
	for(int i=1;i<=n;i++)
	{
		cout<<in[i]<<' ';
	}
	cout<<'\n';
}
int main()
{
	// freopen("in.in","r",stdin);
	// freopen("out.out","w",stdout);
	ll ans=0;
	// ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	read(n,m);
	for(int i=1;i<=n;i++)
	{
		read(in[i]);
		add(i,in[i]);
	}
	init();
	int op,l,r,k;
	for(int i=1;i<=m;i++)
	{
		// out();
		read(op);
		if(op&1)
		{
			read(l,r,k);
			l^=ans,r^=ans,k^=ans;
			less1(l,r,k);
		}
		else
		{
			read(l,r);
			l^=ans,r^=ans;
			ans=find(l,r);
			write(ans);
			putc('\n');
		}
	}
}
2024/7/15 21:51
加载中...