結果
問題 | No.2568 列辞書順列列 |
ユーザー |
![]() |
提出日時 | 2023-12-02 15:05:31 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 291 ms / 3,000 ms |
コード長 | 2,565 bytes |
コンパイル時間 | 4,432 ms |
コンパイル使用メモリ | 260,260 KB |
最終ジャッジ日時 | 2025-02-18 04:14:27 |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 25 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;#pragma GCC target("avx2")#pragma GCC optimize("O3")#pragma GCC optimize("unroll-loops")#define rep(i, n) for(ll i = 0; i < n; i++)#define rep2(i, m, n) for(ll i = m; i <= n; i++)#define rrep(i, m, n) for(ll i = m; i >= n; i--)#define all(a) a.begin(), a.end()#define rall(a) a.rbegin(), a.rend()#define MAX(x) *max_element(all(x))#define MIN(x) *min_element(all(x))#define SZ(a) ((ll)(a).size())#define bit(n, k) ((n >> k) & 1)using namespace std;using ll = long long;using P = pair<ll, ll>;const int dx[4] = { 1, 0, -1, 0};const int dy[4] = { 0, -1, 0, 1};const int inf = 1e9 + 7;const ll infll = 1e18;//const double pi = acos(-1);using Graph = vector<vector<ll>>;using REV_PQ = priority_queue<ll, vector<ll>, greater<ll>>;using PQ = priority_queue<ll>;const int SIZE = 400010;ll powll(ll n, ll x) {// return n ^ x;ll ret = 1;rep(i, x) ret *= n;return ret;}void OutputYesNo(bool val) {if (val) cout << "Yes" << endl;else cout << "No" << endl;}void OutputTakahashiAoki(bool val) {if (val) cout << "Takahashi" << endl;else cout << "Aoki" << endl;}void OutPutInteger(ll x) { cout << x << endl; }void OutPutString(string x) { cout << x << endl; }int pop_count(ll n){int ret = 0;while(n > 0){if(n % 2 == 1) ret++;n /= 2;}return ret;}using PAIR_REV_PQ = priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>>;typedef atcoder::modint998244353 mint;//typedef atcoder::modint1000000007 mint;//typedef modint mint;//typedef vector<mint> ModintVec;mint beki[200010];mint x[200010];struct S{mint sum;ll len;};S op(S a,S b){return {a.sum*beki[b.len]+b.sum,a.len+b.len};}S e(){return {0,0};}using F = ll;S mapping(F f,S s){if(f==0) return s;return {f*x[s.len],s.len};}F composition(F f,F g){if(f==0) return g;return f;}F id(){return 0;}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);ll n, m, q; cin >> n >> m >> q;vector<ll> a(n);rep(i, n) cin >> a[i];rep(i, n) a[i]--;vector<S> v(n);rep(i, n) v[i] = {a[i], 1};beki[0] = 1;rep(i, 200000){beki[i + 1] = beki[i] * m;x[i + 1] = x[i] + beki[i];}atcoder::lazy_segtree<S,op,e,F,mapping,composition,id> seg(v);while(q--){ll l, r; cin >> l >> r;l--;mint res = seg.prod(l, r).sum.val();res++;cout << res.val() << endl;}}