mxqz卡常
查看原帖
mxqz卡常
450902
Maxwell_dcc楼主2022/4/15 11:02

lxl题,现在稳定在502ms~504ms,就差一点点卡不过去。

#include<bits/stdc++.h>
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
using namespace std;
typedef long long ll;
const int N=100009;
const int A=500009; 
inline int read_int(){
	int s=0; char ch=getchar();
	while(ch<48||ch>57)ch=getchar();
	while(ch>=48&&ch<=57){s=(s<<1)+(s<<3)+ch-48; ch=getchar();}
	return s;
}
inline ll read_ll(){
	ll s=0; char ch=getchar();
	while(ch<48||ch>57)ch=getchar();
	while(ch>=48&&ch<=57){s=(s<<1)+(s<<3)+ch-48; ch=getchar();}
	return s;
}
inline void write(ll x){if(x>9)write(x/10); putchar(x%10+48);}
inline void updmx(int&x,int m){if(x<m)x=m;}
int n,q,mx,x[N],cnt[A],*p[A],_o[N*405],*top=_o;
ll bit[N],lastans;
#define LSB(x) ((x)&-(x))
inline void add(int i,int x){while(i<=n)bit[i]+=x,i+=LSB(i);}
inline ll query(int i){ll ret=0; while(i)ret+=bit[i],i-=LSB(i); return ret;}
struct UFS{
	int *fa;
	inline void init(int m){for(int i=0;i<m;i++)fa[i]=i;}
	inline int root(int x){return fa[x]==x?x:fa[x]=root(fa[x]);}
} T[A];
inline void div(int l,int r,int d){
	if(d==1)return;
	l=lower_bound(p[d],p[d]+cnt[d],l)-p[d];
	r=upper_bound(p[d],p[d]+cnt[d],r)-p[d]-1;
	if(l>r)return;
	for(int u=T[d].root(l);u<=r;){
		int pos=p[d][u];
		if(x[pos]%d==0)add(pos,x[pos]/d-x[pos]),x[pos]/=d;
		if(u>=r)break;
		if(x[pos]%d)u=T[d].fa[u]=T[d].root(u+1);
		else u=T[d].root(u+1);
	}
}
int main(){
	n=read_int(); q=read_int();
	for(int i=1;i<=n;i++)add(i,x[i]=read_int()),updmx(mx,x[i]),cnt[x[i]]++;
	for(int i=1;i<=mx;i++)for(int j=i<<1;j<=mx;j+=i)cnt[i]+=cnt[j];
	for(int i=1;i<=mx+1;i++)if(cnt[i]){
		p[i]=top; top+=cnt[i];
		T[i].fa=top; T[i].init(cnt[i]); top+=cnt[i];
		cnt[i]=0;
	}
	for(int i=1;i<=n;i++)
		for(int d=1;d*d<=x[i];d++)
			if(x[i]%d==0){
				p[d][cnt[d]++]=i;
				if(d*d!=x[i])p[x[i]/d][cnt[x[i]/d]++]=i;
			}
	while(q--){
		int op=read_int(); ll l=read_ll()^lastans,r=read_ll()^lastans;
		if(op==1)div(l,r,read_ll()^lastans);
		else{write(lastans=(query(r)-query(l-1))); putchar('\n');}
	}
	return 0;
}

为了卡常,码风非常难看,望谅解。

你咕评测机太慢了

2022/4/15 11:02
加载中...