結果
問題 | No.1558 Derby Live |
ユーザー |
![]() |
提出日時 | 2021-06-26 00:18:26 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 284 ms / 2,000 ms |
コード長 | 3,417 bytes |
コンパイル時間 | 6,647 ms |
コンパイル使用メモリ | 256,060 KB |
最終ジャッジ日時 | 2025-01-22 12:54:55 |
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 33 |
ソースコード
#include <bits/stdc++.h>#define M_PI 3.14159265358979323846 // piusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<ll, ll> P;typedef tuple<ll, ll, ll> t3;typedef tuple<ll, ll, ll, ll> t4;#define rep(a,n) for(ll a = 0;a < n;a++)#define repi(a,n) for(ll a = n - 1;a >= 0;a--)template<typename T>void chmax(T& reference, T value) {reference = max(reference, value);}template<typename T>void chmaxmap(map<T, T>& m, T key, T value) {if (m.count(key)) {chmax(m[key], value);}else {m[key] = value;}}template<typename T>void chmin(T& reference, T value) {reference = min(reference, value);}#include <atcoder/all>using namespace atcoder;typedef modint1000000007 mint;constexpr ll mod = 1000000007;constexpr ll mpow(ll x, ll n) {ll ans = 1; x %= mod;while (n != 0) {if (n & 1) ans = ans * x % mod;x = x * x % mod;n = n >> 1;}return ans;}class Primes {private:vector<int> Prime_Number;vector<bool> is_prime_;public:Primes(int N) {is_prime_.resize(N + 1, true);is_prime_[0] = is_prime_[1] = false;for (int i = 0; i < N + 1; i++) {if (is_prime_[i]) {Prime_Number.push_back(i);for (int j = 2 * i; j <= N; j += i) is_prime_[j] = false;}}}int operator[](int i) { return Prime_Number[i]; }int size() { return Prime_Number.size(); }int back() { return Prime_Number.back(); }bool isPrime(int q) { return is_prime_[q]; }};class SDivisor {public:vector<ll> F;SDivisor(ll N) {for (ll i = 1; i * i <= N; i++) {if (N % i == 0) {F.push_back(i);if (i * i != N) F.push_back(N / i);}}sort(begin(F), end(F));}int size() { return F.size(); }ll operator[](int k) { return F[k]; }const vector<ll>& factors() { return F; }};class Divisor {private:vector<ll> F;vector<pair<ll, ll>> pfactorize;public:Divisor(ll N) {for (ll i = 1; i * i <= N; i++) {if (N % i == 0) {F.push_back(i);if (i * i != N) F.push_back(N / i);}}sort(begin(F), end(F));Primes p((ll)sqrt(N) + 1);for (int i = 0; i < p.size(); i++) {pfactorize.emplace_back(p[i], 0);while (N % p[i] == 0) {N /= p[i];pfactorize.back().second++;}if (pfactorize.back().second == 0) pfactorize.pop_back();}if (N > 1) pfactorize.emplace_back(N, 1);}int size() { return F.size(); }const vector<pair<ll, ll>>& pfac() { return pfactorize; }ll operator[](int k) { return F[k]; }const vector<ll>& factors() { return F; }};ll n, m, q;struct S {uint8_t t[18];S() {for (int i = 0; i < 18; i++) {t[i] = i;}}};S op(S left, S right) {S c;for (int i = 0; i < n; i++) {c.t[i] = left.t[right.t[i]];}return c;}S e() {return S();}int main() {cin >> n >> m >> q;atcoder::segtree<S, op, e> tree1(m);rep(i, q) {int id;cin >> id;if (id == 1) {int d; cin >> d; d--;S s;ll t = 0;rep(j, n) {int x; cin >> x; x--;s.t[x] = j;}tree1.set(d, s);}if (id == 2) {int s; cin >> s; s--;auto u = tree1.prod(0, s + 1);rep(j, n) {cout << u.t[j] + 1 << " ";}cout << endl;}if (id == 3) {int l, r; cin >> l >> r; l--;auto s = tree1.prod(l, r);ll sum = 0;rep(j, n) {sum += abs(s.t[j] - j);}cout << sum << endl;}}return 0;}