Ynoi
Posted alonefight
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ynoi相关的知识,希望对你有一定的参考价值。
luoguP4118 [Ynoi2016]炸脖龙I
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=500005,M=20000005,inf=1e8; 4 #define ll long long 5 int cc,vis[M],pr[M/10],phi[M]; 6 int n,m,a[N];ll c[N]; 7 inline void init() 8 9 for(int i=2;i<M;i++) 10 11 if(!vis[i])pr[++cc]=i,phi[i]=i-1; 12 for(int j=1;j<=cc&&i*pr[j]<M;j++) 13 14 vis[i*pr[j]]=1; 15 if(i%pr[j]==0)phi[i*pr[j]]=phi[i]*pr[j];break; 16 phi[i*pr[j]]=phi[i]*(pr[j]-1); 17 18 19 20 inline void upd(int x,int v)for(;x<=n;x+=x&-x)c[x]+=v; 21 inline ll qry(int x)ll r=0;for(;x;x-=x&-x)r+=c[x];return r; 22 inline ll pw(ll x,ll y,ll p) 23 24 ll r=1;int tx=0,tr=0; 25 for(;y;y>>=1) 26 27 if(y&1)r=r*x;tr|=tx;if(r>=p)r%=p,tr=1; 28 if(x>=p)tx=1,x%=p;x=x*x;if(x>=p)tx=1,x%=p; 29 30 return r+(tr?p:0); 31 32 inline ll sol(int x,int r,ll p)if(p==1||x>r)return 1;ll w=qry(x)+a[x],y=sol(x+1,r,phi[p]);return pw(w,y,p); 33 int main() 34 35 init();scanf("%d%d",&n,&m); 36 for(int i=1;i<=n;i++)scanf("%d",&a[i]); 37 for(int i=1;i<=m;i++) 38 39 int o,l,r,x;scanf("%d%d%d%d",&o,&l,&r,&x); 40 if(o==1)upd(l,x),upd(r+1,-x);else printf("%lld\n",sol(l,r,x)%x); 41 42 return 0; 43
luoguP4688 [Ynoi2016]掉进兔子洞
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=100100,T=25000; 4 inline int rd() 5 6 int x=0;char c=getchar();while(!isdigit(c))c=getchar(); 7 while(isdigit(c))x=x*10+c-48,c=getchar();return x; 8 9 int n,m,W,cc,a[N],b[N],l1[N],l2[N],l3[N],r1[N],r2[N],r3[N],bel[N],cnt[N],ans[N],vis[T+10]; 10 bitset<N>f[T+10],tmp; 11 struct qqint l,r,i,p;q[N]; 12 inline bool cmp(const qq a,const qq b)return a.p<b.p||(a.p==b.p&&a.r<b.r); 13 inline void upd(int x,int o)x=a[x];if(o<0)tmp[x+cnt[x]-1]=0;else tmp[x+cnt[x]]=1;cnt[x]+=o; 14 inline void sol(int x,int y) 15 16 memset(cnt,0,sizeof(cnt));memset(vis,0,sizeof(vis));cc=0;tmp.reset();int l=1,r=0; 17 for(int i=x;i<=y;i++) 18 19 q[++cc]=(qq)l1[i],r1[i],i,bel[l1[i]];q[++cc]=(qq)l2[i],r2[i],i,bel[l2[i]]; 20 q[++cc]=(qq)l3[i],r3[i],i,bel[l3[i]];ans[i]=r1[i]-l1[i]+r2[i]-l2[i]+r3[i]-l3[i]+3; 21 22 sort(q+1,q+cc+1,cmp); 23 for(int i=1;i<=cc;i++) 24 25 while(r<q[i].r)r++,upd(r,1); 26 while(l>q[i].l)l--,upd(l,1); 27 while(r>q[i].r)upd(r,-1),r--; 28 while(l<q[i].l)upd(l,-1),l++; 29 int t=q[i].i-x+1;if(!vis[t])vis[t]=1,f[t]=tmp;else f[t]&=tmp; 30 31 for(int i=x;i<=y;i++)ans[i]-=f[i-x+1].count()*3; 32 33 int main() 34 35 n=rd();m=rd();W=sqrt(n); 36 for(int i=1;i<=n;i++)a[i]=rd();b[i]=a[i];bel[i]=(i-1)/W+1; 37 sort(b+1,b+n+1); 38 for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+n+1,a[i])-b; 39 for(int i=1;i<=m;i++)l1[i]=rd();r1[i]=rd();l2[i]=rd();r2[i]=rd();l3[i]=rd();r3[i]=rd(); 40 for(int i=1;i<=m;i+=T)sol(i,min(m,i+T-1)); 41 for(int i=1;i<=m;i++)printf("%d\n",ans[i]); 42 return 0; 43
luoguP5398 [Ynoi2018]GOSICK
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define pb push_back 5 const int N=100005,M=100000,W=500; 6 int n,m,a[N],b[N],c[N],ss[N],r1[N],r2[N],r3[N],r4[N];ll p1[N],p2[N],res[N<<1],ans[N]; 7 struct stint l,r,i;q[N];vector<st>g[N];vector<int>V[N]; 8 inline bool cmp(st a,st b)return a.l/W^b.l/W?a.l<b.l:a.r<b.r; 9 inline void init() 10 11 for(int i=1;i<=M;i++)for(int j=i;j<=M;j+=i)V[j].pb(i); 12 for(int i=1;i<=M;i++)for(int j=1;j<=32;j++)if(i%j==0)ss[i]|=1<<j-1; 13 14 void ins(int x) 15 16 if(x<=32) 17 18 if(x<=8)for(int i=0;i<256;i++)r1[i]+=(i>>(x-1)&1); 19 else if(x<=16)for(int i=0;i<256;i++)r2[i]+=(i>>(x-9)&1); 20 else if(x<=24)for(int i=0;i<256;i++)r3[i]+=(i>>(x-17)&1); 21 else for(int i=0;i<256;i++)r4[i]+=(i>>(x-25)&1); 22 23 else for(int i=x;i<=M;i+=x)b[i]++; 24 25 inline int calc(int x)x=ss[x];return r1[x&255]+r2[x>>8&255]+r3[x>>16&255]+r4[x>>24&255]; 26 inline int sum(int x)return b[x]+c[x]+calc(x); 27 int main() 28 29 scanf("%d%d",&n,&m);init(); 30 for(int i=1;i<=n;i++)scanf("%d",&a[i]); 31 for(int i=1;i<=m;i++)scanf("%d%d",&q[i].l,&q[i].r);q[i].i=i; 32 sort(q+1,q+m+1,cmp);int l=1,r=0; 33 for(int i=1;i<=m;i++) 34 35 if(l<q[i].l)g[r].pb((st)l,q[i].l-1,i<<1);else if(l>q[i].l)g[r].pb((st)q[i].l,l-1,i<<1);l=q[i].l; 36 if(r<q[i].r)g[l-1].pb((st)r+1,q[i].r,i<<1|1);else if(r>q[i].r)g[l-1].pb((st)q[i].r+1,r,i<<1|1);r=q[i].r; 37 38 for(int i=1;i<=n;i++) 39 40 p1[i]=p1[i-1]+sum(a[i]); 41 for(int j=0;j<V[a[i]].size();j++)c[V[a[i]][j]]++; 42 ins(a[i]);p2[i]=p2[i-1]+sum(a[i]); 43 for(int j=0;j<g[i].size();j++)st t=g[i][j];for(int k=t.l;k<=t.r;k++)res[t.i]+=sum(a[k]); 44 45 l=1,r=0;ll s=0; 46 for(int i=1;i<=m;i++) 47 48 if(l<q[i].l)s+=p2[q[i].l-1]-p2[l-1]-res[i<<1];else if(l>q[i].l)s+=res[i<<1]+p2[q[i].l-1]-p2[l-1];l=q[i].l; 49 if(r<q[i].r)s+=p1[q[i].r]-p1[r]-res[i<<1|1];else if(r>q[i].r)s+=res[i<<1|1]-p1[r]+p1[q[i].r];r=q[i].r;ans[q[i].i]=s+r-l+1; 50 51 for(int i=1;i<=m;i++)printf("%lld\n",ans[i]); 52 return 0; 53
以上是关于Ynoi的主要内容,如果未能解决你的问题,请参考以下文章