結果
| 問題 |
No.2206 Popcount Sum 2
|
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-08-21 18:09:51 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 523 ms / 4,000 ms |
| コード長 | 1,062 bytes |
| コンパイル時間 | 2,875 ms |
| コンパイル使用メモリ | 282,868 KB |
| 実行使用メモリ | 14,588 KB |
| 最終ジャッジ日時 | 2025-08-21 18:10:04 |
| 合計ジャッジ時間 | 12,699 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 18 |
ソースコード
#include<bits/stdc++.h>
#define int long long
#define mod 998244353
#define N 200005
using namespace std;
struct Data{int x,y,num;}w[N];
int n,B,l,r,res=1,fac[N],inv[N],ans[N],p[N];
bool cmp(Data x,Data y)
{
if(x.x/B!=y.x/B) return x.x<y.x;
if((x.x/B)&1) return x.y<y.y;
return x.y>y.y;
}
int C(int n,int m)
{
if(n<m) return 0;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
p[0]=fac[0]=1;
for(int i=1;i<=200000;i++) fac[i]=fac[i-1]*i%mod;
inv[200000]=532999597;
for(int i=1;i<=200000;i++) p[i]=p[i-1]*2%mod;
for(int i=199999;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
cin>>n;
B=sqrt(n);
for(int i=1;i<=n;i++) cin>>w[i].x>>w[i].y,w[i].num=i,w[i].x--,w[i].y--;
sort(w+1,w+n+1,cmp);
for(int i=1;i<=n;i++)
{
while(w[i].x<l) res=(res+C(--l,r))*inv[2]%mod;
while(w[i].y>r) res=(res+C(l,++r))%mod;
while(w[i].x>l) res=(res*2-C(l++,r))%mod;
while(w[i].y<r) res=(res-C(l,r--))%mod;
ans[w[i].num]=(p[w[i].x+1]-1)*res%mod;
}
for(int i=1;i<=n;i++) cout<<(ans[i]+mod)%mod<<"\n";
return 0;
}
vjudge1