結果
問題 | No.1558 Derby Live |
ユーザー |
![]() |
提出日時 | 2024-08-07 20:52:38 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 130 ms / 2,000 ms |
コード長 | 1,356 bytes |
コンパイル時間 | 1,331 ms |
コンパイル使用メモリ | 119,728 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-08-07 20:52:47 |
合計ジャッジ時間 | 8,647 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 33 |
ソースコード
#include<iostream>#include<vector>#include<algorithm>using namespace std;using ll = long long;#include<atcoder/segtree>#include<array>using dat = array<int,18>;dat op(dat a,dat b){dat c{};for(int i = 0;i<18;i++) c[i] = b[a[i]];return c;}dat e(){dat c{};for(int i = 0;i<18;i++) c[i] = i;return c;}int main(){cin.tie(nullptr);ios::sync_with_stdio(false);int n,m,q;cin>>n>>m>>q;atcoder::segtree<dat,op,e> seg(m);while(q--){int t;cin>>t;if(t==1){int d;cin>>d;d--;dat now = e();for(int i = 0;i<n;i++){cin>>now[i];now[i]--;}seg.set(d,now);}else if(t==2){int s;cin>>s;s--;dat ans = seg.prod(0,s+1);vector<int> rev(n);for(int i = 0;i<n;i++) rev[ans[i]] = i;for(int i = 0;i<n;i++){if(i) cout<<" ";cout<<rev[i]+1;}cout<<endl;}else{int l,r;cin>>l>>r;l--;r--;dat now = seg.prod(l,r+1);ll ans = 0;for(int i = 0;i<n;i++) ans += abs(now[i]-i);cout<<ans<<endl;}}}