結果

問題 No.2206 Popcount Sum 2
コンテスト
ユーザー vjudge1
提出日時 2026-06-01 17:36:40
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 866 ms / 4,000 ms
コード長 1,298 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,839 ms
コンパイル使用メモリ 220,560 KB
実行使用メモリ 15,488 KB
最終ジャッジ日時 2026-06-01 17:36:54
合計ジャッジ時間 13,502 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge2_0
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 18
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
const int p=500;
long long fc[200005]={1},inv[200005]={1},fj[200005]={1},ans[200005];
long long c(int a,int b){
	return fc[a]*inv[b]%mod*inv[a-b]%mod;
}long long a(int a,int b){
	return fc[a]*inv[a-b]%mod;
}long long qpow(long long a,long long b){
	if(b==0)return 1;
	if(b==1)return a;
	long long t=qpow(a,b/2);
	return t*t%mod*qpow(a,b%2)%mod;
}
int t;
struct que{
	int n,m,i;
}q[200005];
vector<que>vv[505];
bool operator<(que a,que b){
	return a.n<b.n;
}
int main(){
	for(int i=1;i<=2e5+4;i++)fc[i]=fc[i-1]*i%mod,inv[i]=qpow(fc[i],mod-2),fj[i]=fj[i-1]*2%mod;
	cin>>t;
	for(int i=1;i<=t;i++){
		cin>>q[i].n>>q[i].m;q[i].i=i;
		vv[q[i].m/p].push_back(q[i]);
	}for(int pp=0;pp<=500;pp++){
		int len=vv[pp].size();
		sort(vv[pp].begin(),vv[pp].end());
		int a=1,b=1;
		long long d=1;
		for(int i=0;i<len;i++){
			while(a<vv[pp][i].n){
				d=(d+d-c(a-1,b-1)+mod)%mod;
				a++;
			}
			while(b<vv[pp][i].m){
				d=(d+c(a-1,b))%mod;
				b++;
			}
			while(b>vv[pp][i].m){
				d=(d-c(a-1,b-1)+mod)%mod;
				b--;
			}
			ans[vv[pp][i].i]=d*((fj[vv[pp][i].n]+mod-1)%mod)%mod;
		}
	}for(int i=1;i<=t;i++)cout<<ans[i]<<endl;
	return 0;
}/*
(n,m)->(n,m+1) +=C(n-1,m)
(n,m)->(n,m-1) -=C(n-1,m-1)
(n,m)->(n+1,m) +=(n,m)-C(n-1,m-1)

*/
0