結果
問題 |
No.2206 Popcount Sum 2
|
ユーザー |
![]() |
提出日時 | 2025-08-03 11:58:38 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,212 bytes |
コンパイル時間 | 3,171 ms |
コンパイル使用メモリ | 280,852 KB |
実行使用メモリ | 8,300 KB |
最終ジャッジ日時 | 2025-08-03 11:58:52 |
合計ジャッジ時間 | 13,520 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 1 WA * 17 |
ソースコード
#include<bits/stdc++.h> using namespace std; const int N=2e5+5,B=447; const int P=998244353,I=499122177; int n,ans[N]; int fac[N],inv[N]; struct ques{int m,k,id;}a[N]; bool cmp(ques x,ques y){ return x.m/B!=y.m/B?x.m<y.m:x.k<y.k; }int qp(int x,int y){ int z=1; for(;y;y>>=1,x=1ll*x*x%P) if(y&1)z=1ll*z*x%P; return z; }void init(){ const int n=1e5; fac[0]=inv[0]=1; for(int i=1;i<=n;++i) fac[i]=1ll*fac[i-1]*i%P, inv[i]=qp(fac[i],P-2); }int C(int n,int m){ if(n<0||m<0||n>m)return 0; return 1ll*fac[m]*inv[n]%P*inv[m-n]%P; }void add(int &x,int y){ x+=y;if(x>=P)x-=P; }signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n;init(); for(int i=1;i<=n;++i) cin>>a[i].m>>a[i].k,a[i].id=i, --a[i].m,--a[i].k; sort(a+1,a+n+1,cmp); int m=0,k=0,sum=1; for(int i=1;i<=n;++i){ int M=a[i].m,K=a[i].k; while(k<K)++k,add(sum,C(k,m)); while(k>K)add(sum,P-C(k,m)),k--; while(m<M)sum=(sum*2%P+P-C(k,m))%P,++m; while(m>M)--m,sum=1ll*I*(sum+C(k,m))%P; ans[a[i].id]=1ll*sum*(qp(2,M+1)-1)%P; }for(int i=1;i<=n;++i) cout<<ans[i]<<'\n'; return 0; }