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 
View Code

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 
View Code

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  
View Code

 

以上是关于Ynoi的主要内容,如果未能解决你的问题,请参考以下文章

luogu P4688 [Ynoi2016]掉进兔子洞

Ynoi

「Ynoi2015」我回来了

[Ynoi2015]我回来了

BZOJ4810: [Ynoi2017]由乃的玉米田

P5068 [Ynoi2015]我回来了