社区讨论
求助QwQ
P5071[Ynoi Easy Round 2015] 此时此刻的光辉参与者 11已保存回复 40
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 40 条
- 当前快照
- 1 份
- 快照标识符
- @mi7drwtw
- 此快照首次捕获于
- 2025/11/20 20:01 4 个月前
- 此快照最后确认于
- 2025/11/20 23:45 4 个月前
除了#6全RE是什么QwQ
CPP// luogu-judger-enable-o2
/*
QAQ
*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+100,M=1e6+100;
const ll mod=19260817;
int prime[M],mp[M];
int pos[N],a[N];
ll ans[N],out;
int n,m;
int ssp[N][200],sum[N][200];
vector<int>Q;
bool v[N];
struct node{
int l,r,now;
bool operator < (const node &a)const
{
if(pos[l]!=pos[a.l]) return pos[l]<pos[a.l];
return r<a.r;
}
} s[N];
void ins(int x)
{
if(a[x]==1) return;
out*=prime[mp[a[x]]+1];
out%=mod;
mp[a[x]]++;
out*=mp[a[x]]+1;
out%=mod;
}
void del(int x)
{
if(a[x]==1) return;
out*=prime[mp[a[x]]+1];
out%=mod;
mp[a[x]]--;
out*=mp[a[x]]+1;
out%=mod;
}
int main()
{
memset(v,false,sizeof(v));
prime[1]=1;
for(int i=2;i<=M;i++) prime[i]=(ll)(mod-mod/i)*prime[mod%i]%mod;
for(int i=2;i<=1000;i++)
{
if(!v[i]) Q.push_back(i);
for(int j=i+i;j<=1000;j+=i) v[j]=true;
}
scanf("%d %d",&n,&m);
memset(mp,0,sizeof(mp));
out=1;
int k=sqrt(n);
for(ll i=1;i<=n;i++)
{
pos[i]=(i-1)/k+1;
scanf("%d",&a[i]);
int temp=a[i];
for(int j=0;j<Q.size();j++)
while(temp%Q[j]==0)
{
temp/=Q[j];
ssp[i][j]++;
}
for(int j=0;j<Q.size();j++) sum[i][j]=sum[i-1][j]+ssp[i][j];
a[i]=temp;
}
for(int i=1;i<=m;i++)
{
scanf("%d %d",&s[i].l,&s[i].r);
s[i].now=i;
}
sort(s+1,s+m+1);
int l=1,r=0;
for(int i=1;i<=m;i++)
{
while(r>s[i].r) del(r),r--;
while(r<s[i].r) r++,ins(r);
while(l<s[i].l) del(l),l++;
while(l>s[i].l) l--,ins(l);
ll q=1;
for(int j=0;j<Q.size();j++)
{
q*=sum[s[i].r][j]-sum[s[i].l-1][j]+1;
q%=mod;
}
ans[s[i].now]=(out*q)%mod;
}
for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);
return 0;
}
回复
共 40 条回复,欢迎继续交流。
正在加载回复...