結果
| 問題 | No.2206 Popcount Sum 2 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-08-02 16:15:30 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 830 ms / 4,000 ms |
| コード長 | 1,589 bytes |
| 記録 | |
| コンパイル時間 | 1,864 ms |
| コンパイル使用メモリ | 167,904 KB |
| 実行使用メモリ | 10,132 KB |
| 最終ジャッジ日時 | 2025-08-02 16:15:42 |
| 合計ジャッジ時間 | 10,926 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 18 |
コンパイルメッセージ
main.cpp: In function ‘void cyzz::MAIN()’:
main.cpp:40:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
40 | scanf("%d",&n);
| ~~~~~^~~~~~~~~
main.cpp:43:38: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
43 | int x,y;scanf("%d%d",&x,&y);
| ~~~~~^~~~~~~~~~~~~~
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define eb emplace_back
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define rep(i,x,y) for(int i=(x);i<=(y);i++)
#define per(i,y,x) for(int i=(y);i>=(x);i--)
bool Memst;
namespace cyzz
{
#define N 200005
#define mod 998244353
#define B 500
inline void Add(int &x,int y){x+=y;(x>=mod)&&(x-=mod);}
int fac[N],inv[N],pw[N];
int bel[N];
void init()
{
inv[0]=inv[1]=1;
rep(i,2,N-5) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
fac[0]=pw[0]=1;
rep(i,1,N-5)
{
inv[i]=1ll*inv[i-1]*inv[i]%mod;
fac[i]=1ll*fac[i-1]*i%mod;
pw[i]=2ll*pw[i-1]%mod;
}
rep(i,1,N-5) bel[i]=(i-1)/B+1;
}
inline int C(int x,int y)
{
if(x<y||x<0||y<0) return 0;
return 1ll*fac[x]*inv[x-y]%mod*inv[y]%mod;
}
int n,ans[N];
struct Query{int l,r,id;}a[N];
void MAIN()
{
init();
scanf("%d",&n);
rep(i,1,n)
{
int x,y;scanf("%d%d",&x,&y);
ans[i]=pw[x]-1;
a[i]={y-1,x-1,i};
}
sort(a+1,a+n+1,[&](Query x,Query y){return bel[x.l]==bel[y.l]?x.r<y.r:bel[x.l]<bel[y.l];});
int L=0,R=0,now=1;
rep(i,1,n)
{
while(L>a[i].l) Add(now,mod-C(R,L)),L--;
while(R<a[i].r) now=2ll*now%mod,Add(now,mod-C(R,L)),R++;
while(L<a[i].l) Add(now,C(R,L+1)),L++;
while(R>a[i].r) Add(now,C(R-1,L)),now=1ll*now*inv[2]%mod,R--;
ans[a[i].id]=1ll*ans[a[i].id]*now%mod;
}
rep(i,1,n) printf("%d\n",ans[i]);
}
}bool Memed;
int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
cyzz::MAIN();
debug("%.2lfms %.2lfMB",1.0*clock()/CLOCKS_PER_SEC*1000,
1.0*abs(&Memed-&Memst)/1024/1024);
}
vjudge1