結果
| 問題 | No.3617 Swap |
| コンテスト | |
| ユーザー |
tau1235
|
| 提出日時 | 2026-08-06 15:39:24 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
AC
|
| 実行時間 | 421 ms / 2,000 ms |
| + 188µs | |
| コード長 | 1,062 bytes |
| 記録 | |
| コンパイル時間 | 3,109 ms |
| コンパイル使用メモリ | 345,384 KB |
| 実行使用メモリ | 42,608 KB |
| 最終ジャッジ日時 | 2026-08-06 15:39:47 |
| 合計ジャッジ時間 | 18,188 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| サンプル | 0 % | AC * 4 |
| 小課題1 | 5 % | AC * 3 |
| 小課題2 | 5 % | AC * 5 |
| 小課題3 | 15 % | AC * 14 |
| 小課題4 | 20 % | AC * 21 |
| 小課題5 | 25 % | AC * 8 |
| 小課題6 | 10 % | AC * 8 |
| 小課題7 | 20 % | AC * 56 |
| 合計 | 3 * 100% = 300 点 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
void solve(){
using ll=long long;
int n,m,q;
cin>>n>>m>>q;
vector<pair<int,int>> lr(m);
vector<int> p(n);
iota(p.begin(),p.end(),0);
for (int i=0;i<m;i++){
int l,r;
cin>>l>>r;
l--;r--;
lr[i]={l,r};
swap(p[l],p[r]);
}
int log=62;
vector next(log,vector<int>(n));
next[0]=p;
for (int t=0;t<log-1;t++){
for (int i=0;i<n;i++) next[t+1][i]=next[t][next[t][i]];
}
auto f=[&](ll d,int v){
for (int i=0;i<log;i++){
if ((d>>i)&1) v=next[i][v];
}
return v;
};
vector<vector<int>> g(m);
vector<pair<ll,int>> vq(q);
for (int i=0;i<q;i++){
ll t,x;
cin>>t>>x;
x--;
vq[i]={t,x};
g[t%m].push_back(i);
}
vector<int> a(n);
iota(a.begin(),a.end(),0);
vector<int> ans(q);
for (int i=0;i<m;i++){
for (int j:g[i]){
auto [t,x]=vq[j];
ans[j]=f(t/m,a[x])+1;
}
auto [l,r]=lr[i];
swap(a[l],a[r]);
}
for (int i=0;i<q;i++) cout<<ans[i]<<endl;
}
int main(){
int t=1;
//cin>>t;
while (t--) solve();
}
tau1235