結果
| 問題 | No.2206 Popcount Sum 2 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-08-02 15:44:59 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 1,186 ms / 4,000 ms |
| コード長 | 1,246 bytes |
| 記録 | |
| コンパイル時間 | 5,040 ms |
| コンパイル使用メモリ | 96,576 KB |
| 実行使用メモリ | 8,160 KB |
| 最終ジャッジ日時 | 2025-08-02 15:45:21 |
| 合計ジャッジ時間 | 18,356 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 18 |
ソースコード
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=2e5+5,Mod=998244353,inv2=(Mod+1)/2;
int T,n,m,len;
int jc[N],jc_inv[N],ans[N];
struct Query{
int l,r,id;
}q[N];
bool cmp(const Query &a,const Query &b){
return a.l/len!=b.l/len?a.l<b.l:a.r<b.r;
}
int power(int a,int b){
int c=1;
for(;b;b>>=1){
if(b&1) c=1ll*c*a%Mod;
a=1ll*a*a%Mod;
}
return c;
}
void init(){
jc[0]=jc_inv[0]=1;
for(int i=1;i<=N-5;i++) jc[i]=1ll*jc[i-1]*i%Mod;
jc_inv[N-5]=power(jc[N-5],Mod-2);
for(int i=N-6;i;i--) jc_inv[i]=1ll*jc_inv[i+1]*(i+1)%Mod;
}
int C(int n,int m){
if(n<0||m<0||n<m) return 0;
return 1ll*jc[n]*jc_inv[m]%Mod*jc_inv[n-m]%Mod;
}
int main(){
cin>>T;
for(int i=1;i<=T;i++){
cin>>q[i].l>>q[i].r;
q[i].id=i,q[i].l--,q[i].r--;
}
init();
len=sqrt(N-5);
sort(q+1,q+T+1,cmp);
int l=0,r=0,res=1;
for(int i=1;i<=T;i++){
int ql=q[i].l,qr=q[i].r;
while(l<ql){
res=(2ll*res%Mod-C(l,r)+Mod)%Mod;
l++;
}
while(l>ql){
l--;
res=1ll*(res+C(l,r))%Mod*inv2%Mod;
}
while(r<qr){
r++;
res=(res+C(l,r))%Mod;
}
while(r>qr){
res=(res-C(l,r)+Mod)%Mod;
r--;
}
ans[q[i].id]=1ll*res*(power(2,ql+1)-1+Mod)%Mod;
}
for(int i=1;i<=T;i++) cout<<ans[i]<<endl;
return 0;
}
vjudge1