結果
問題 | No.1549 [Cherry 2nd Tune] BANning Tuple |
ユーザー | googol_S0 |
提出日時 | 2021-06-11 21:54:40 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,397 bytes |
コンパイル時間 | 5,063 ms |
コンパイル使用メモリ | 290,152 KB |
実行使用メモリ | 10,752 KB |
最終ジャッジ日時 | 2024-05-08 17:35:54 |
合計ジャッジ時間 | 11,998 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 3 ms
10,752 KB |
testcase_01 | AC | 18 ms
5,248 KB |
testcase_02 | AC | 124 ms
5,376 KB |
testcase_03 | AC | 294 ms
5,888 KB |
testcase_04 | AC | 300 ms
6,016 KB |
testcase_05 | AC | 288 ms
5,888 KB |
testcase_06 | AC | 286 ms
5,632 KB |
testcase_07 | WA | - |
testcase_08 | TLE | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
testcase_11 | -- | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
ソースコード
#include<bits/stdc++.h> #include<atcoder/all> using namespace std; using namespace atcoder; typedef long long ll; using mint=modint998244353; int M=3001; vector<mint> op(vector<mint> a,vector<mint> b){ vector<mint> c=convolution(a,b); vector<mint> r(min(M,(int)(c.size())),0); for(int i=0;i<(int)(r.size());i++){ r[i]=c[i]; } return r; } vector<mint> e(){ vector<mint> r(1,1); return r; } int main(){ int N,Q; cin>>N>>Q; vector<ll> K(Q); vector<vector<int>> que(Q,vector<int>(4)); for(int i=0;i<Q;i++){ cin>>K[i]; K[i]--; for(int j=0;j<4;j++){ cin>>que[i][j]; } } vector<ll> X=K; sort(X.begin(),X.end()); decltype(X)::iterator result=unique(X.begin(),X.end()); X.erase(result,X.end()); int L=X.size(); unordered_map<ll,int> Y; for(int i=0;i<L;i++){ Y[X[i]]=i; } vector<vector<mint>> Z(L,vector<mint>(M+1,1)); vector<vector<mint>> x(L,vector<mint>(M+1,1)); segtree<vector<mint>,op,e> seg(x); vector<mint> p(M+1,1); vector<mint> q(1,1); ll R=N-L; while(R){ if(R&1){ q=op(p,q); } p=op(p,p); R>>=1; } int I; for(int i=0;i<Q;i++){ I=Y[K[i]]; for(int j=que[i][0];j<=que[i][1];j++){ Z[I][j]=0; } seg.set(I,Z[I]); vector<mint> A=op(seg.all_prod(),q); mint ANS=0; for(int j=que[i][2];j<=que[i][3];j++){ ANS+=A[j]; } cout<<ANS.val()<<"\n"; } }