A题Absolute

#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; const ll mod=998244353; ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head int n,l[20],r[20]; vector<PII> evt; int comb[20][20]; ll inv[20]; int ret[20],poly[20],rret[20]; ll integral(int *c,int n,int x) { ll ret=0; ll w=1; rep(i,0,n+1) { w=w*x%mod; ret=(ret+w*c[i]%mod*inv[i+1])%mod; } return ret; } int main() { scanf("%d",&n); int s=0; rep(i,0,n) { scanf("%d%d",l+i,r+i); s-=l[i]; r[i]-=l[i]; if (r[i]==0) { --i; --n; } } if (n==0) { printf("%d ",abs(s)); return 0; } rep(i,0,20) { comb[i][0]=comb[i][i]=1; rep(j,1,i) { comb[i][j]=(comb[i-1][j-1]+comb[i-1][j])%mod; } } rep(i,0,20) inv[i]=powmod(i,mod-2); rep(S,0,(1<<n)) { int lb=0; rep(i,0,n) if (S&(1<<i)) lb+=r[i]; evt.pb(mp(lb,__builtin_parity(S)?-1:1)); } evt.pb(mp(s,0)); bool sg=0; sort(all(evt)); ll ans=0; rep(i,0,SZ(evt)) { int x=evt[i].fi; int y=(i==SZ(evt)-1)?1e9:evt[i+1].fi; ll w=1; per(j,0,n) { poly[j]=w*comb[n-1][j]%mod; w=w*(mod-x)%mod; } if (evt[i].se==1) { rep(j,0,n) ret[j]=(ret[j]+poly[j])%mod; } if (evt[i].se==-1) { rep(j,0,n) ret[j]=(ret[j]+mod-poly[j])%mod; } if (evt[i].se==0) { sg^=1; } rret[0]=0; rep(j,0,n) rret[j+1]=ret[j]; rep(j,0,n) rret[j]=(rret[j]-(ll)ret[j]*s)%mod; if (sg) { ans+=integral(rret,n,y)-integral(rret,n,x); } else { ans+=integral(rret,n,x)-integral(rret,n,y); } // printf("%lld ",ans); } ans%=mod; if (ans<0) ans+=mod; rep(j,1,n) ans=ans*inv[j]%mod; rep(j,0,n) ans=ans*powmod(r[j],mod-2)%mod; printf("%lld ",ans); }
B题Counting Permutations

#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head const int N=220; int dp[N][1010],comb[N][N],fr[N],n,x; ll tmp[1010]; ll mod=1000000007,mod2; int main() { scanf("%lld",&mod); mod2=mod*mod; rep(i,0,201) { comb[i][0]=comb[i][i]=1; rep(j,1,i) comb[i][j]=(comb[i-1][j-1]+comb[i-1][j])%mod; } dp[0][0]=1; fr[0]=0; dp[1][1]=1; fr[1]=1; for (int i=2;i<=200;i++) { for (int j=0;j<i;j++) { int l=j,r=i-1-j,x=min(l,r)+1; if (l>r) break; fr[i]=max(fr[i],x+fr[l]+fr[r]); rep(k,0,fr[l]+fr[r]+1) tmp[k]=0; for (int pl=l;pl<=fr[l];pl++) { for (int pr=r;pr<=fr[r];pr++) { tmp[pl+pr]=tmp[pl+pr]+(ll)dp[l][pl]*dp[r][pr]; if (tmp[pl+pr]>=mod2) tmp[pl+pr]-=mod2; } } ll coef=comb[i-1][l]; if (l<r) coef=coef*2%mod; rep(k,0,fr[l]+fr[r]+1) { dp[i][k+x]=(dp[i][k+x]+tmp[k]%mod*coef)%mod; } } } while (scanf("%d%d",&n,&x)!=EOF) { if (x>fr[n]) puts("0"); else printf("%d ",dp[n][x]); } }
C题 Cover

// C #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; const ll mod=1000000007; ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head const int N=101000; int _,n,x,y; pair<PII,int> p[N]; int main() { for (scanf("%d",&_);_;_--) { scanf("%d",&n); rep(i,0,3*n) { scanf("%d%d",&x,&y); p[i]=mp(mp(x,y),i); } sort(p,p+3*n); rep(i,0,n) { printf("%d %d %d ",p[3*i].se+1,p[3*i+1].se+1,p[3*i+2].se+1); } } }

#include<algorithm> #include <iostream> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <math.h> #include <time.h> #include <vector> #include <bitset> #include <queue> #include <map> #include <set> using namespace std; #define next VIVONEX const int N=100005,M=500005; int n,m,G[N],tot,e[M],next[M],deg[N],top,stk[M],vis[M],fa[N],w; vector<int> ji[N],Ans[N]; int getfa(int u) { return u==fa[u]?u:fa[u]=getfa(fa[u]); } inline void adde(int u,int v) { // cout<<u<<" "<<v<<endl; next[++tot]=G[u];G[u]=tot;e[tot]=v; } void dfs(int u) { for(int &v=G[u];v;v=next[v]) { if(vis[v>>1]) continue; int t=v; vis[v>>1]=1;dfs(e[v]); stk[++top]=(t&1?-(t>>1):t>>1); } } #define clr(_) memset(_,0,sizeof(_)) void solve() { clr(G);clr(deg);clr(vis); tot=1; for(int i=1;i<=n;i++) ji[i].clear(),Ans[i].clear(),fa[i]=i; for(int i=1,u,v;i<=m;i++) scanf("%d%d",&u,&v),adde(u,v),adde(v,u),deg[u]++,deg[v]++,fa[getfa(u)]=getfa(v); for(int i=1;i<=n;i++) if(deg[i]&1) ji[getfa(i)].push_back(i); w=0; for(int i=1;i<=n;i++) if(fa[i]==i) { if(!ji[i].size()) { top=0;dfs(i);++w; while(top) Ans[w].push_back(stk[top--]); } else { for(int j=0;j<ji[i].size();j+=2) adde(ji[i][j],ji[i][j+1]),adde(ji[i][j+1],ji[i][j]); // cout<<tot<<endl; top=0;dfs(i); vector<int> pos; for(int i=top;i;i--) if(stk[i]>m||stk[i]<-m) pos.push_back(i); for(int i=0;i<pos.size()-1;i++) { w++; for(int j=pos[i]-1;j>pos[i+1];j--) Ans[w].push_back(stk[j]); } w++; for(int j=pos[pos.size()-1]-1;j;j--) Ans[w].push_back(stk[j]); for(int j=top;j>pos[0];j--) Ans[w].push_back(stk[j]); } } int t=w; for(int i=1;i<=w;i++) if(Ans[i].size()==0) t--; cout<<t<<endl; for(int i=1;i<=w;i++) if(Ans[i].size()!=0) { printf("%d",Ans[i].size()); for(int j=0;j<Ans[i].size();j++) printf(" %d",Ans[i][j]); puts(""); } } int main() { while(cin>>n>>m) solve(); return 0; }
D题 Game

#include<algorithm> #include <iostream> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <math.h> #include <time.h> #include <vector> #include <bitset> #include <queue> #include <map> #include <set> using namespace std; int n; int main() { while(scanf("%d",&n)!=EOF) puts("Yes"); return 0; }
E题 Hack it

#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; const ll mod=1000000007; ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head int p; bool grid[3010][3010]; int main() { p=47; rep(i,0,p) rep(j,0,p) { rep(k,0,p) grid[i*p+j][k*p+(j*k+i)%p]=1; } puts("2000"); rep(i,0,2000) { rep(j,0,2000) printf("%d",grid[i][j]); puts(""); } }
F题 Matrix

#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; const ll mod=998244353; ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head const int N=3010; ll fac[N],fnv[N]; int pw[9000100]; int gg[3010][3010]; ll f[3010][3010]; int n,m,a,b; int main() { fac[0]=fnv[0]=1; rep(i,1,3001) fac[i]=fac[i-1]*i%mod,fnv[i]=powmod(fac[i],mod-2); pw[0]=1; for (int i=1;i<=9000000;i++) pw[i]=pw[i-1]*2%mod; for (int w=0;w<=3000;w++) for (int z=0;z<=3000;z++) gg[w][z]=pw[w*z]*fnv[w]%mod*fnv[z]%mod; for (int s=0;s<=3001;s++) { for (int u=s;u>=0;u--) { int val=fnv[u]*fnv[s-u]%mod; if ((s-u)%2) val=mod-val; f[s][u]=(f[s][u+1]+val)%mod; } } while (scanf("%d%d%d%d",&n,&m,&a,&b)!=EOF) { ll ans=0; rep(w,0,n-a+1) rep(z,0,m-b+1) ans=(ans+f[n-w][a]*f[m-z][b]%mod*gg[w][z])%mod; printf("%lld ",ans*fac[n]%mod*fac[m]%mod); } }
G题 Native Operations

#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; const ll mod=1000000007; ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head const int N=101000; struct node { int fg; int s; int mv; }nd[4*N]; int b[N],n,m,l,r; char s[20]; void upd(int p) { nd[p].mv=min(nd[p+p].mv,nd[p+p+1].mv); nd[p].s=nd[p+p].s+nd[p+p+1].s; } void setf(int p,int f) { nd[p].fg+=f; nd[p].mv+=f; } void build(int p,int l,int r) { nd[p].fg=0; if (l==r) { nd[p].mv=b[l]-1; nd[p].s=0; } else { int md=(l+r)>>1; build(p+p,l,md); build(p+p+1,md+1,r); upd(p); } } void push(int p) { if (nd[p].fg) { setf(p+p,nd[p].fg); setf(p+p+1,nd[p].fg); nd[p].fg=0; } } int query(int p,int l,int r,int tl,int tr) { if (tl==l&&tr==r) return nd[p].s; else { push(p); int md=(l+r)>>1; if (tr<=md) return query(p+p,l,md,tl,tr); else if (tl>md) return query(p+p+1,md+1,r,tl,tr); else return query(p+p,l,md,tl,md)+query(p+p+1,md+1,r,md+1,tr); } } void modify(int p,int l,int r,int tl,int tr) { if (tl>tr) return; // printf("modify %d %d %d %d %d %d ",l,r,tl,tr,nd[p].mv,nd[p].s); if (tl==l&&tr==r) { if (nd[p].mv>0) { nd[p].mv--; nd[p].fg--; } else { if (tl==tr) { nd[p].mv=b[l]-1; nd[p].s++; } else { push(p); int md=(l+r)>>1; if (nd[p+p].mv==0) modify(p+p,l,md,tl,md); else setf(p+p,-1); if (nd[p+p+1].mv==0) modify(p+p+1,md+1,r,md+1,tr); else setf(p+p+1,-1); upd(p); } } } else { push(p); int md=(l+r)>>1; if (tr<=md) modify(p+p,l,md,tl,tr); else if (tl>md) modify(p+p+1,md+1,r,tl,tr); else modify(p+p,l,md,tl,md),modify(p+p+1,md+1,r,md+1,tr); upd(p); } // printf("ff %d %d ",p,nd[p].s); } int main() { while (scanf("%d%d",&n,&m)!=EOF) { rep(i,1,n+1) scanf("%d",b+i); build(1,1,n); rep(i,1,m+1) { scanf("%s%d%d",s,&l,&r); if (s[0]=='a') { modify(1,1,n,l,r); } else { printf("%d ",query(1,1,n,l,r)); } } } }
H题 Odd Shops

#include<iostream> #include<cmath> #include<cstdio> #include<algorithm> #include<cstring> #include<bitset> using namespace std; const int N=17,M=50,gow1=(1<<18)-1; int A[21],B[21],n,K,C[100],preK,fir[100],zerobit; int go[4][1<<18],pd[1<<18]; long long f[2][1<<18],L,R,m,Lim[70],checkB; char ch[30]; void preget(int K){ long long x=0,y=0; int k1=K; for (int i=0;i<=N;i++){ x|=(1ll*(k1&1)<<(i<<1)); k1>>=1; } pd[K]=(((x^checkB)>>zerobit)==0); go[0][K]=((x>>N)&gow1); go[1][K]=((x>>N+1)&gow1); for (int i=0;i<=n;i++) if (A[i]) y^=(x<<i); go[2][K]=((y>>N)&gow1); go[3][K]=((y>>N+1)&gow1); } long long solve(long long m,long long lim){ if (lim==0) return 0; Lim[0]=lim; for (int i=1;i<=60;i++) Lim[i]=(Lim[i-1]+1)>>1; memset(f,0x00,sizeof f); memset(fir,0x00,sizeof fir); fir[0]=1; memset(C,0x00,sizeof C); C[M]=1; long long nowlen=1; int now=0; f[0][1<<N]=1; int LI=0; while ((1ll<<LI)<=m) LI++; for (int t=LI-1;t>=0;t--){ int ne=now^1; long long *F=f[now]; long long *G=f[ne]; memset(f[ne],0x00,sizeof f[ne]); long long lim=Lim[t]; if ((m&(1ll<<t))==0){ for (int i=0;i<(1<<N+1);i++) G[go[0][i]]+=F[i]; for (int i=0;i<(1<<N+1);i++) G[go[1][i]]+=F[i]; nowlen<<=1; bitset<150>x,y; x=0; y=0; for (int i=0;i<=M;i++) x[i<<1]=C[i]; int del=max(0ll,nowlen-lim); for (int i=0;i<del;i++){ int num=0; for (int j=0;j<=N;j++) num+=(x[(M<<1)-i-N+j+1]<<j); G[num]--; } // cout<<M<<" "<<del<<endl; for (int i=0;i<=M;i++) C[i]=x[i+M-del+1]; nowlen=min(nowlen,lim); x=0; for (int i=0;i<=M;i++) x[i<<1]=fir[i]; for (int i=0;i<=M;i++) fir[i]=x[i]; } else { for (int i=0;i<(1<<N+1);i++) G[go[2][i]]+=F[i]; for (int i=0;i<(1<<N+1);i++) G[go[3][i]]+=F[i]; nowlen=(nowlen<<1)+n; bitset<150>x,y; x=0; y=0; for (int i=0;i<=M;i++) x[i<<1]=C[i]; for (int i=0;i<=n;i++) if (A[i]) y^=(x<<i); for (int i=0;i<n;i++){ int num=0; for (int j=0;j<=N;j++) num+=(y[(M<<1)+n-i-N+j+1]<<j); G[num]++; } int del=max(0ll,nowlen-lim);// cerr<<del<<endl; for (int i=0;i<del;i++){ int num=0; for (int j=0;j<=N;j++) num+=(y[(M<<1)+n-i-N+j+1]<<j); G[num]--; } for (int i=0;i<=M;i++) C[i]=y[i+n+M-del+1]; nowlen=min(nowlen,lim); x=0; y=0; for (int i=0;i<=M;i++) x[i<<1]=fir[i]; for (int i=0;i<=n;i++) if (A[i]) y^=(x<<i); for (int i=0;i<=M;i++) fir[i]=y[i]; } now=ne; } long long ans=0; for (int i=0;i<(1<<N+1);i++) if (pd[i]&&f[now][i]){ // cout<<"asd "<<f[now][i]<<" "; // for (int j=0;j<=N;j++) if (i&(1<<j)) putchar('1'); else putchar('0'); putchar(' '); ans+=f[now][i]; } return ans; } void solve(){ checkB=0; n=10;L=1;R=n*m+1;K=1; preK=K; memset(A,0x00,sizeof A); memset(B,0x00,sizeof B); A[0]=1; for(int i=1,w=0;i<=n;i++) scanf("%d",&w),A[i]=w&1; if (R-L+1<K){ printf("0 "); return; } B[0]=1; zerobit=(N-preK+1<<1); //cout<<zerobit<<endl; for (int i=0;i<preK;i++) if (B[i]) checkB|=(1ll<<(N-i<<1)); long long tot=n*m+1; for (int i=0;i<(1<<N+1);i++) preget(i); printf("%lld ",(solve(m,tot-L+1)-solve(m,tot-R+K-1))%998244353); } int main(){ while(cin>>m) solve(); return 0; }
I 题 Segment

from fractions import Fraction as F def prob(n,l,r): if l==1 and r==n: return F(1,1) elif l==1 or r==n: return F(1,r-l+1) else: return F(2,(r-l+1)*(r-l+2)) def solve(n,l,r): ret=0 for i in xrange(1,n+1): for j in xrange(i,n+1): if (i<l and j>r) or (i==l and j==r): ret+=prob(n,i,j) elif i<=r and j>r: ret+=prob(n,i,j)*(1+F(r-i+(i!=l),j-i)) elif j>=l and i<l: ret+=prob(n,i,j)*(1+F(j-l+(j!=r),j-i)) return ret H=[0] for i in xrange(1,100): H.append(H[i-1]+F(1,i)) def solve3(n,l,r): ret=0 if l==1: ret+=1-F(r-1,n-1)+H[n-1]-H[r] else: if r==n: ret+=2*(H[n-1]-H[l-1])-(l-2)*(F(1,l-1)-F(1,n-1)) else: ret+=H[n-1]-H[l-1]+F(1,r)*F(r-l,r-1) ret+=H[r-1]-H[l-1]-(l-2)*(F(1,l-1)-F(1,r-1)) return ret def ff(p,q): if p<=1 or q>=n: return 0 return 2*(H[q-1]-H[q-p]+H[n-p]-H[n-1]) def solve2(n,l,r): if l==1 and r==n: return 1 if r==n: l,r=n+1-r,n+1-l ret=0 if l==1: ret+=(1+F(r-1,n-1)) else: ret+=1 ret+=solve3(n,l,r) ret+=solve3(n,n+1-r,n+1-l) if l!=r: ret+=ff(l-1,l) ret+=ff(r,r+1) ret-=ff(l-1,r+1) if l>1: ret+=F(2,r-l+1)-F(2,r-l+2) else: ret+=ff(l,l) if l>1: ret+=F(r-l,(r-l+1)*(r-l+2))-F(r-l,(n-l)*(n-l+1)) ret+= H[r-l+1]+H[n-r-1]-H[n-l-1]-F(n-r,n-l) if l>1: ret+=F(r-l,(r-l+1)*(r-l+2))-F(r-l,(r-1)*r); ret+=H[r-l+1]+H[l-2]-H[r-2]-F(l-1,r-1); return ret for n in xrange(1,10): for l in xrange(1,n+1): for r in xrange(l,n+1): print n,l,r,solve(n,l,r),solve2(n,l,r) assert solve(n,l,r)==solve2(n,l,r)

#include<algorithm> #include <iostream> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <math.h> #include <time.h> #include <vector> #include <bitset> #include <queue> #include <map> #include <set> using namespace std; typedef long long LL; const int N=1000005,Mod=998244353; int n,q,inv[N],H[N]; int Pow(int x,int y) { int s=1; while(y) { if(y&1) s=s*(LL)x%Mod; x=x*(LL)x%Mod;y>>=1; } return s; } int F(int a,int b) { return a*(LL)inv[b]%Mod; } int solve3(int l,int r) { int ret=0; if(l==1) ret=(1ll-F(r-1,n-1)+H[n-1]-H[r]+Mod*2)%Mod; else if(r==n) ret=((2*(H[n-1]-H[l-1])-(LL)(l-2)*(F(1,l-1)-F(1,n-1)))%Mod+Mod)%Mod; else ret=((H[n-1]-H[l-1]+F(1,r)*(LL)F(r-l,r-1)+H[r-1]-H[l-1]-(LL)(l-2)*(F(1,l-1)-F(1,r-1)))%Mod+Mod)%Mod; return ret; } int ff(int p,int q) { if(p<=1||q>=n) return 0; return 2*((LL)H[q-1]-H[q-p]+H[n-p]-H[n-1]+Mod*2)%Mod; } int solve(int l,int r) { if(l==1&&r==n) return 1; if(r==n) r=n+1-l,l=1; int ret=0; if(l==1) ret=(ret+1+F(r-1,n-1))%Mod; else ret=(ret+1)%Mod; ret=(ret+solve3(l,r))%Mod; ret=(ret+solve3(n+1-r,n+1-l))%Mod; if(r<n) { if(l>1) ret=((ret+(r-l)*((LL)F(1,r-l+1)-F(1,r-l+2)-F(1,n-l)+F(1,n-l+1)))%Mod+Mod)%Mod; ret=(ret+(LL)H[r-l+1]+H[n-r-1]-H[n-l-1]-F(n-r,n-l)+Mod*2)%Mod; } if(l>1) { if(r<n) ret=((ret+(r-l)*((LL)F(1,r-l+1)-F(1,r-l+2)-F(1,r-1)+F(1,r)))%Mod+Mod)%Mod; ret=(ret+(LL)H[r-l+1]+H[l-2]-H[r-2]-F(l-1,r-1)+Mod*2)%Mod; } if(l!=r) { ret=(ret+ff(l-1,l)+(LL)ff(r,r+1)-ff(l-1,r+1)+Mod)%Mod; if(l>1) ret=(ret+F(2,r-l+1)-F(2,r-l+2)+(LL)Mod)%Mod; } else ret=(ret+ff(l,l))%Mod; return ret; } int main() { cin>>n>>q; inv[1]=1; for(int i=2;i<=n;i++) inv[i]=(Mod-(Mod/i))*(LL)inv[Mod%i]%Mod; for(int i=1;i<=n;i++) H[i]=(H[i-1]+inv[i])%Mod; for(int i=1,l,r;i<=q;i++) scanf("%d%d",&l,&r),printf("%d ",solve(l,r)); return 0; }
J题 Swaps and Inversions

#include<algorithm> #include <iostream> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <math.h> #include <time.h> #include <vector> #include <bitset> #include <queue> #include <map> #include <set> using namespace std; const int N=100005; typedef long long LL; LL ans; int n,x,y,a[N],c[N]; inline void msort(int l,int r) { if(l==r)return; int mid=(l+r)>>1; msort(l,mid);msort(mid+1,r); int i=l,j=mid+1,k=l; while(i<=mid&&j<=r){ if(a[i]<=a[j]) c[k++]=a[i++]; else{ c[k++]=a[j++]; ans+=(mid-i+1); } } while(i<=mid)c[k++]=a[i++]; while(j<=r)c[k++]=a[j++]; for(i=l;i<=r;i++) a[i]=c[i]; } void solve() { for(int i=1;i<=n;i++) scanf("%d",&a[i]); ans=0; msort(1,n); cout<<ans*min(x,y)<<endl; } int main() { while(scanf("%d%d%d",&n,&x,&y)!=EOF) solve(); return 0; }
2A