結果

問題 No.2206 Popcount Sum 2
ユーザー vjudge1
提出日時 2025-08-02 17:15:11
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 2,157 bytes
コンパイル時間 2,065 ms
コンパイル使用メモリ 202,288 KB
実行使用メモリ 8,996 KB
最終ジャッジ日時 2025-08-02 17:15:26
合計ジャッジ時間 13,971 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 1
other WA * 18
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
#define pii std::pair<int,int>
#define mkp std::make_pair
#define fir first
#define sec second
typedef long long ll;
inline void rd(){}
template<typename T,typename ...U>
inline void rd(T &x,U &...args){
    int ch=getchar();
    T f=1;x=0;
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    x*=f;rd(args...);
}
const int N=2e5+5,B=500,mod=998244353,INV2=(mod+1)/2;
namespace Binom{
    std::vector<int> fac,inv;
    inline int KSM(int x,int n){
        int ans=1;
        while(n){
            if(n&1)ans=1ll*ans*x%mod;
            x=1ll*x*x%mod;n>>=1;
        }return ans;
    }
    inline int C(int n,int m){
        if(n==m)return 1;
        if(n<m||n<0||m<0)return 0;
        return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;
    }
    inline void Init(int V){
        fac.resize(V+2);
        inv.resize(V+2);
        fac[0]=inv[0]=1;
        for(int i=1;i<=V;i++)fac[i]=1ll*fac[i-1]*i%mod;
        inv[V]=KSM(fac[V],mod-2);
        for(int i=V-1;i>=1;i--)inv[i]=1ll*inv[i+1]*(i+1)%mod;
    }
}
using namespace Binom;
inline void Add(int &a,int b){(a+=b)>=mod?a-=mod:1;}
int T,idv[N],ans[N];
struct node{int n,m,id;}p[N];
signed main(){
    rd(T);
    Init(200005);
    for(int i=1;i<=T;i++)rd(p[i].n,p[i].m),p[i].id=i;
    for(int i=1;i<=200000;i++)idv[i]=(i-1)/B+1;
    std::sort(p+1,p+T+1,[](node a,node b){return idv[a.n]==idv[b.n]?a.m<b.m:a.n<b.n;});
    int nown=0,nowm=0,res=1;
    auto Addm=[&](){
        ++nowm;
        Add(res,C(nown,nowm));
    };
    auto Mnsm=[&](){
        Add(res,mod-C(nown,nowm));
        --nowm;
    };
    auto Addn=[&](){
        res=(res*2ll-C(nown,nowm)+mod)%mod;
        ++nown;
    };
    auto Mnsn=[&](){
        --nown;
        res=1ll*(res+C(nown,nowm))*INV2%mod;
    };
    for(int i=1;i<=T;i++){
        int n=p[i].n,m=p[i].m;
        --n,--m;
        printf("ch %d %d\n",n,m);
        while(nown<n)Addn();
        while(nowm<m)Addm();
        while(nowm>m)Mnsm();
        while(nown>n)Mnsn();
        ans[p[i].id]=1ll*res*(KSM(2,n+1)-1)%mod;
    }
    for(int i=1;i<=T;i++)printf("%d\n",ans[i]);
    return 0;
}
0