結果
問題 |
No.2206 Popcount Sum 2
|
ユーザー |
![]() |
提出日時 | 2025-08-19 17:40:47 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 806 ms / 4,000 ms |
コード長 | 1,729 bytes |
コンパイル時間 | 662 ms |
コンパイル使用メモリ | 74,596 KB |
実行使用メモリ | 13,284 KB |
最終ジャッジ日時 | 2025-08-19 17:41:00 |
合計ジャッジ時間 | 12,231 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 18 |
ソースコード
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #define ll long long #define N 200005 #define INF (ll)1e18 #define PII pair<ll, ll> #define lowbit(x) x&(-x) using namespace std; inline ll rd(){ ll res=0, f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9') res=(res<<3)+(res<<1)+(ch^48), ch=getchar(); return (f>0?res:-res); } ll T, n, m, bl, l, r, res; ll p[N], inv[N], ans[N]; const ll mod=998244353; ll ksm(ll a, ll b){ ll res=1; while(b){ if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; } return res; } ll C(ll n, ll m){ if(n<m) return 0; return p[n]*inv[m]%mod*inv[n-m]%mod; } struct Data{ ll l, r, id; }q[N]; bool cmp(Data x, Data y){ if(x.l/bl!=y.l/bl) return x.l<y.l; return x.r<y.r; } void addl(ll x){ res=(res+C(x, r))%mod*((mod+1)>>1)%mod; } void dell(ll x){ res=(res*2%mod-C(x, r)+mod)%mod; } void addr(ll x){ res=(res+C(l, x))%mod; } void delr(ll x){ res=(res-C(l, x)+mod)%mod; } int main(){ T=rd(), bl=sqrt(2e5), p[0]=1; for (int i=1; i<=N-5; i++) p[i]=(p[i-1]*i)%mod; inv[N-5]=ksm(p[N-5], mod-2); for (int i=N-6; i>=0; i--) inv[i]=(inv[i+1]*(i+1))%mod; for(int i=1; i<=T; i++) q[i]={rd()-1, rd()-1, i}; sort(q+1, q+T+1, cmp); l=0, r=0, res=1; for(int i=1; i<=T; i++){ // cout<<q[i].l<<' '<<q[i].r<<endl; while(l<q[i].l) dell(l++); while(l>q[i].l) addl(--l); while(r<q[i].r) addr(++r); while(r>q[i].r) delr(r--); // cout<<res<<endl; ans[q[i].id]=res*(ksm(2, q[i].l+1)-1)%mod; } for (int i=1; i<=T; i++) printf("%lld\n", ans[i]); return 0; } /* */