結果
問題 |
No.2568 列辞書順列列
|
ユーザー |
|
提出日時 | 2025-03-17 02:05:32 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 109 ms / 3,000 ms |
コード長 | 880 bytes |
コンパイル時間 | 2,207 ms |
コンパイル使用メモリ | 196,764 KB |
実行使用メモリ | 7,324 KB |
最終ジャッジ日時 | 2025-03-17 02:05:40 |
合計ジャッジ時間 | 8,534 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 25 |
ソースコード
#include<bits/stdc++.h> #define int long long #define matsuri pair<int,int> //const int iris = 1e9+7; const int iris = 998244353; using namespace std; void solve() { auto qwq=[&](int a,int b=iris-2) { int res=1; while(b) { if(b&1) res=res*a%iris; a=a*a%iris; b/=2; } return res; }; int n,m,q; cin>>n>>m>>q; vector<int> bit(n+1); auto add=[&](int a,int b) { for(int i=a;i<=n;i+=i&-i) bit[i]=(bit[i]+b)%iris; }; auto qry=[&](int a) { int res=0; for(int i=a;i>0;i-=i&-i) res=(res+bit[i])%iris; return res; }; for(int i=1;i<=n;i++) { int a; cin>>a; add(i, (a-1)*qwq(m,n-i)%iris); } while(q--) { int l,r; cin>>l>>r; int ans=(qry(r)-qry(l-1)+iris)%iris; cout<<(ans*qwq(qwq(m, n-r))+1)%iris<<'\n'; } } signed main() { ios::sync_with_stdio(0); cin.tie(0); int T=1; //cin>>T; while(T--) solve(); return 0; }