提出 #74382649
ソースコード 拡げる
#include<bits/stdc++.h>
// #define XAERIC666
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#ifndef XAERIC666
#define xaeric(...) {fprintf(stderr,__VA_ARGS__);fflush(stderr);}
#else
#define xaeric(...) 114514
#endif
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||'9'<c){if(c=='-')f=-1;c=getchar();}
while('0'<=c&&c<='9'){x=x*10+c-48;c=getchar();}
return x*f;
}
// void in(int*a,int n){for(int i=1;i<=n;i++)a[i]=read();}
// void out(int*a,int n){for(int i=1;i<=n;i++)printf("%lld%c",a[i]," \n"[i==n]);}
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define _rep(i,a,b) for(int i=(b);i>=(a);--i)
#define YES puts("YES");
#define NO puts("NO");
using namespace std;
const int P=998244353;
const int N=5005;
int fac[N],ifac[N];
int qpow(int a,int k,int p=P){
int r=1;
while(k){
if(k&1){
r=r*a%p;
}
a=a*a%p;
k/=2;
}
return r;
}
void zuhe(int n){
fac[0]=1;
for(int i=1;i<=n;i++){
fac[i]=fac[i-1]*i%P;
}
ifac[n]=qpow(fac[n],P-2);
for(int i=n-1;~i;i--){
ifac[i]=ifac[i+1]*(i+1)%P;
}
}
int c(int n,int m){
if(n<0||m<0){
return 0;
}
if(m>n){
return 0;
}
return fac[n]*ifac[m]%P*ifac[n-m]%P;
}
int n,m,a[N],pre[N],suf[N];
int ans[N][N];
int cnt[N],v[N],x[N][N],y[N][N];
int pp[N];
void solve(){
zuhe(N-5);
n=read(),m=read();
for(int i=1;i<=n;i++){
a[i]=read();
cnt[i]=cnt[i-1]+(a[i]==-1);
v[a[i]]=1;
}
pre[0]=n;
for(int i=1;i<=n;i++){
pre[i]=pre[i-1];
if(a[i]!=-1){
pre[i]=min(pre[i],a[i]);
}
pp[i]=pp[i-1];
if(!v[i]){
pp[i]++;
}
}
suf[n+1]=n;
for(int i=n;i>=1;i--){
suf[i]=suf[i+1];
if(a[i]!=-1){
suf[i]=min(suf[i],a[i]);
}
// xaeric(" + %lld\n",suf[i]);
}
for(int cc=0;cc<=cnt[n];cc++){
x[cc][0]=0;
for(int i=1;i<=n;i++){
x[cc][i]=x[cc][i-1];
if(!v[i]){
x[cc][i]+=(c(pp[n-1]-pp[i-1],cc)-c(pp[n-1]-pp[i],cc)+P)%P*i%P;
x[cc][i]%=P;
}
}
for(int i=n;i>=1;i--){
y[cc][i]=y[cc][i+1];
if(!v[i]){
y[cc][i]+=(c(pp[n-1]-pp[i-1],cc)-c(pp[n-1]-pp[i],cc)+P)%P;
y[cc][i]%=P;
}
}
// xaeric("! %lld\n",cc);
// for(int i=1;i<=n;i++){
// xaeric(" + %lld %lld %lld\n",i,x[cc][i],y[cc][i]);
// }
ans[cc][0]=0;
for(int m=1;m<=n;m++){
ans[cc][m]=(x[cc][m-1]+y[cc][m]*m%P)%P*fac[cc]%P*fac[cnt[n]-cc]%P;
}
}
for(int i=1;i<=m;i++){
int x=read(),y=read();
int tmp=min(pre[x-1],suf[y+1]);
// xaeric(" ! %lld %lld\n",pre[x-1],suf[y+1]);
printf("%lld\n",ans[cnt[n]-(cnt[y]-cnt[x-1])][tmp]);
}
}
signed main(){
int TTTT=1;
// int TTTT=read();
while(TTTT--){
solve();
}
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | B - Range Mex Sum |
| ユーザ | Xaeric |
| 言語 | C++23 (GCC 15.2.0) |
| 得点 | 700 |
| コード長 | 2844 Byte |
| 結果 | AC |
| 実行時間 | 616 ms |
| メモリ | 597592 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 700 / 700 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt, 01_test_45.txt, 01_test_46.txt, 01_test_47.txt, 01_test_48.txt, 01_test_49.txt, 01_test_50.txt, 01_test_51.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3912 KiB |
| 00_sample_01.txt | AC | 1 ms | 3824 KiB |
| 00_sample_02.txt | AC | 1 ms | 3896 KiB |
| 01_test_00.txt | AC | 66 ms | 41148 KiB |
| 01_test_01.txt | AC | 65 ms | 40980 KiB |
| 01_test_02.txt | AC | 66 ms | 40940 KiB |
| 01_test_03.txt | AC | 66 ms | 40952 KiB |
| 01_test_04.txt | AC | 68 ms | 40824 KiB |
| 01_test_05.txt | AC | 63 ms | 37664 KiB |
| 01_test_06.txt | AC | 67 ms | 37736 KiB |
| 01_test_07.txt | AC | 45 ms | 21696 KiB |
| 01_test_08.txt | AC | 51 ms | 21684 KiB |
| 01_test_09.txt | AC | 36 ms | 4024 KiB |
| 01_test_10.txt | AC | 37 ms | 4284 KiB |
| 01_test_11.txt | AC | 33 ms | 4024 KiB |
| 01_test_12.txt | AC | 35 ms | 4040 KiB |
| 01_test_13.txt | AC | 602 ms | 596136 KiB |
| 01_test_14.txt | AC | 595 ms | 597592 KiB |
| 01_test_15.txt | AC | 590 ms | 597564 KiB |
| 01_test_16.txt | AC | 599 ms | 592240 KiB |
| 01_test_17.txt | AC | 583 ms | 594764 KiB |
| 01_test_18.txt | AC | 575 ms | 587780 KiB |
| 01_test_19.txt | AC | 583 ms | 587684 KiB |
| 01_test_20.txt | AC | 571 ms | 581688 KiB |
| 01_test_21.txt | AC | 587 ms | 581900 KiB |
| 01_test_22.txt | AC | 509 ms | 534672 KiB |
| 01_test_23.txt | AC | 532 ms | 532828 KiB |
| 01_test_24.txt | AC | 429 ms | 476080 KiB |
| 01_test_25.txt | AC | 464 ms | 476024 KiB |
| 01_test_26.txt | AC | 257 ms | 299676 KiB |
| 01_test_27.txt | AC | 281 ms | 297780 KiB |
| 01_test_28.txt | AC | 110 ms | 121528 KiB |
| 01_test_29.txt | AC | 130 ms | 123328 KiB |
| 01_test_30.txt | AC | 75 ms | 62900 KiB |
| 01_test_31.txt | AC | 88 ms | 62784 KiB |
| 01_test_32.txt | AC | 45 ms | 15796 KiB |
| 01_test_33.txt | AC | 50 ms | 15780 KiB |
| 01_test_34.txt | AC | 42 ms | 9888 KiB |
| 01_test_35.txt | AC | 43 ms | 9924 KiB |
| 01_test_36.txt | AC | 38 ms | 5324 KiB |
| 01_test_37.txt | AC | 40 ms | 5464 KiB |
| 01_test_38.txt | AC | 37 ms | 4800 KiB |
| 01_test_39.txt | AC | 39 ms | 4796 KiB |
| 01_test_40.txt | AC | 35 ms | 4284 KiB |
| 01_test_41.txt | AC | 38 ms | 4172 KiB |
| 01_test_42.txt | AC | 616 ms | 569976 KiB |
| 01_test_43.txt | AC | 568 ms | 534840 KiB |
| 01_test_44.txt | AC | 500 ms | 476112 KiB |
| 01_test_45.txt | AC | 372 ms | 358448 KiB |
| 01_test_46.txt | AC | 264 ms | 240952 KiB |
| 01_test_47.txt | AC | 172 ms | 123472 KiB |
| 01_test_48.txt | AC | 116 ms | 64568 KiB |
| 01_test_49.txt | AC | 74 ms | 29356 KiB |
| 01_test_50.txt | AC | 2 ms | 3928 KiB |
| 01_test_51.txt | AC | 1 ms | 3900 KiB |