Advertisement
tepyotin2

P51 Swapity Swapity Swap #1014

Nov 8th, 2023
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5. #define MAXN 100000
  6.  
  7. int N,M,K;
  8. int l[100],r[100];
  9. int p[MAXN];
  10. int cc[MAXN];
  11. int pos[MAXN];
  12. vector<int> A[MAXN+1];
  13. int ans[MAXN];
  14.  
  15. int main() {
  16.     freopen("swap.in","r",stdin);
  17.     freopen("swap.out","w",stdout);
  18.     cin >> N >> M >> K;
  19.     for(int i=0;i<M;i++) {
  20.         cin >> l[i] >> r[i];
  21.         l[i]--,r[i]--;
  22.     }
  23.     for(int i=0;i<N;i++) {
  24.         p[i] = i;
  25.         for(int j=0;j<M;j++)
  26.             if(p[i] >= l[j] && p[i] <= r[j])
  27.                 p[i] = r[j] + l[j] - p[i];
  28.     }
  29.     int C = 1;
  30.     for(int i=0;i<N;i++) if(!cc[i]) {
  31.         cc[i] = C;
  32.         A[C].push_back(i);
  33.         int j = p[i];
  34.         if(j != i) pos[j] = 1;
  35.         while(j != i) {
  36.             A[C].push_back(j);
  37.             cc[j] = C;
  38.             if(p[j]!=i) pos[p[j]] = 1 + pos[j];
  39.             j = p[j];
  40.         }
  41.         C++;
  42.     }
  43.     for(int i=0;i<N;i++)
  44.         ans[A[cc[i]][(pos[i] + K)%A[cc[i]].size()]] = i;
  45.     for(int i=0;i<N;i++)
  46.         cout << ans[i]+1 << '\n';
  47.    
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement