码迷,mamicode.com
首页 > 其他好文 > 详细

Loj #6164. 「美团 CodeM 初赛 Round A」数列互质

时间:2018-03-03 22:30:41      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:max   turn   http   log   pre   tor   using   ack   space   

link : https://loj.ac/problem/6164

 

莫队傻题,直接容斥做。

 

#include<bits/stdc++.h>
#define maxn 100005
#define pb push_back
using namespace std;
vector<int> g[maxn];
struct ask{
	int l,r,K,num,bl;
	bool operator <(const ask &u)const{
		return bl==u.bl?((bl&1)?r<u.r:r>u.r):bl<u.bl;
	}
}q[maxn];
int a[maxn],n,m;
int num[maxn],sz,cnt[maxn];
int ans[maxn],d[10],ci[30];
int tot,mul[2905],jc[2905];

inline void init(){
	ci[0]=1;
	for(int i=1;i<=20;i++) ci[i]=ci[i-1]<<1;
	for(int i=1;i<=n;i++)
	    for(int j=i;j<=n;j+=i) g[j].pb(i);
	mul[0]=1;
	for(int i=1;i<=2900;i++) mul[i]=-mul[i^(i&-i)];
}

inline int calc(int O){
	tot=0;
	for(int i=2;i*i<=O;i++) if(!(O%i)){
		d[tot++]=i;
		while(!(O%i)) O/=i;
		if(O==1) break;
	}
	if(O!=1) d[tot++]=O;
	
	int an=0;
	
	jc[0]=1;
	for(int i=0;i<tot;i++) jc[ci[i]]=d[i];
	for(int i=0,p;i<ci[tot];i++){
		p=i^(i&-i);
		if(p) jc[i]=jc[p]*jc[i^p];
		an+=mul[i]*num[jc[i]];
	} 
	
	return an;
}

inline void add(int O){
	for(int i=g[O].size()-1;i>=0;i--){
		num[g[O][i]]++;
	}
}

inline void del(int O){
	for(int i=g[O].size()-1;i>=0;i--){
		num[g[O][i]]--;
	}
}

inline void solve(){
	int le=1,ri=0;
	for(int i=1;i<=m;i++){
		while(ri<q[i].r) ri++,del(cnt[a[ri]]),cnt[a[ri]]++,add(cnt[a[ri]]);
		while(ri>q[i].r) del(cnt[a[ri]]),cnt[a[ri]]--,add(cnt[a[ri]]),ri--;
		while(le>q[i].l) le--,del(cnt[a[le]]),cnt[a[le]]++,add(cnt[a[le]]);
		while(le<q[i].l) del(cnt[a[le]]),cnt[a[le]]--,add(cnt[a[le]]),le++;
		
		ans[q[i].num]=calc(q[i].K);
	}
}

int main(){
	scanf("%d%d",&n,&m);
	init(),sz=sqrt(n);
	for(int i=1;i<=n;i++) scanf("%d",a+i);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].K);
		q[i].num=i,q[i].bl=(q[i].l-1)/sz+1;
	}
	
	sort(q+1,q+m+1);
	
	solve();
	
	for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
	return 0;
}

  

Loj #6164. 「美团 CodeM 初赛 Round A」数列互质

标签:max   turn   http   log   pre   tor   using   ack   space   

原文地址:https://www.cnblogs.com/JYYHH/p/8503174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!