Submission #519036

#TimeUsernameProblemLanguageResultExecution timeMemory
519036ymmSorting (IOI15_sorting)C++17
100 / 100
215 ms20256 KiB
/// /// Oh? You're approaching me? /// #include <bits/stdc++.h> #define Loop(x,l,r) for(ll x = ll(l); x < ll(r); ++x) #define LoopR(x,l,r) for(ll x = ll(r)-1; x >= ll(l); --x) #define Kill(x) exit((cout << (x) << '\n', 0)) typedef long long ll; typedef std::pair<int,int> pii; typedef std::pair<ll,ll> pll; using namespace std; #include "sorting.h" const int N = 2e5+10; int a[N], b[N]; int *S, *X, *Y, *P, *Q; int n, m; void init(int* s){ Loop(i,0,n) a[i] = s[i], b[s[i]] = i; } void swp(int i, int j){ swap(b[a[i]], b[a[j]]); swap(a[i], a[j]); } bool can(int k){ init(S); Loop(i,0,k) swp(X[i], Y[i]); int cnt=0; static bitset<N> vis; vis.reset(); Loop(i,0,n){ if(vis[i]) continue; ++cnt; int j=i; while(!vis[j]) vis[j]=1, j=a[j]; } return n-cnt<=k; } void solve(int k){ init(S); Loop(i,0,k) swp(X[i], Y[i]); for(int i=0,j=0; i<n; ++i){ if(b[i] != i){ P[j] = a[i]; Q[j] = a[b[i]]; swp(i, b[i]); ++j; } } init(S); Loop(i,0,k){ swp(X[i], Y[i]); Q[i] = b[Q[i]]; P[i] = b[P[i]]; swp(P[i], Q[i]); } } int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { n=N; m=M; ::S=S; ::X=X; ::Y=Y; ::P=P; ::Q=Q; int l=0, r=m; while(l<r){ int m=(l+r)/2; if(can(m)) r=m; else l=m+1; } solve(l); return l; }

Compilation message (stderr)

sorting.cpp: In function 'void init(int*)':
sorting.cpp:22:37: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   22 |  Loop(i,0,n) a[i] = s[i], b[s[i]] = i;
      |                                     ^
sorting.cpp: In function 'bool can(int)':
sorting.cpp:40:9: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   40 |   int j=i;
      |         ^
sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:68:73: warning: declaration of 'Q' shadows a global declaration [-Wshadow]
   68 | int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
      |                                                                     ~~~~^~~
sorting.cpp:18:22: note: shadowed declaration is here
   18 | int *S, *X, *Y, *P, *Q;
      |                      ^
sorting.cpp:68:64: warning: declaration of 'P' shadows a global declaration [-Wshadow]
   68 | int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
      |                                                            ~~~~^~~
sorting.cpp:18:18: note: shadowed declaration is here
   18 | int *S, *X, *Y, *P, *Q;
      |                  ^
sorting.cpp:68:55: warning: declaration of 'Y' shadows a global declaration [-Wshadow]
   68 | int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
      |                                                   ~~~~^~~
sorting.cpp:18:14: note: shadowed declaration is here
   18 | int *S, *X, *Y, *P, *Q;
      |              ^
sorting.cpp:68:46: warning: declaration of 'X' shadows a global declaration [-Wshadow]
   68 | int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
      |                                          ~~~~^~~
sorting.cpp:18:10: note: shadowed declaration is here
   18 | int *S, *X, *Y, *P, *Q;
      |          ^
sorting.cpp:68:30: warning: declaration of 'S' shadows a global declaration [-Wshadow]
   68 | int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
      |                          ~~~~^~~
sorting.cpp:18:6: note: shadowed declaration is here
   18 | int *S, *X, *Y, *P, *Q;
      |      ^
sorting.cpp:68:23: warning: declaration of 'N' shadows a global declaration [-Wshadow]
   68 | int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
      |                   ~~~~^
sorting.cpp:16:11: note: shadowed declaration is here
   16 | const int N = 2e5+10;
      |           ^
sorting.cpp:72:7: warning: declaration of 'm' shadows a global declaration [-Wshadow]
   72 |   int m=(l+r)/2;
      |       ^
sorting.cpp:19:8: note: shadowed declaration is here
   19 | int n, m;
      |        ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...