Submission #388249

#TimeUsernameProblemLanguageResultExecution timeMemory
388249ACmachineSorting (IOI15_sorting)C++17
74 / 100
1088 ms22464 KiB
#include "sorting.h" #include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; template<typename T, typename U> using ordered_map = tree<T, U, less<T>, rb_tree_tag, tree_order_statistics_node_update>; typedef long long ll; typedef long double ld; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef vector<int> vi; typedef vector<ll> vll; #define FOR(i,j,k,in) for(int i=(j); i < (k);i+=in) #define FORD(i,j,k,in) for(int i=(j); i >=(k);i-=in) #define REP(i,b) FOR(i,0,b,1) #define REPD(i,b) FORD(i,b,0,1) #define pb push_back #define mp make_pair #define ff first #define ss second #define all(x) begin(x), end(x) #define MANY_TESTS int tcase; cin >> tcase; while(tcase--) const double EPS = 1e-9; const int MOD = 1e9+7; const ll INFF = 1e18; const int INF = 1e9; const ld PI = acos((ld)-1); const vi dy = {1, 0, -1, 0, -1, 1, 1, -1}; const vi dx = {0, 1, 0, -1, -1, 1, -1, 1}; void DBG(){cout << "]" << endl;} template<typename T, typename ...U> void DBG(const T& head, const U... args){ cout << head << "; "; DBG(args...); } #define dbg(...) cout << "Line(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__); #define chk() cout << "Check at line(" << __LINE__ << ") hit." << endl; template<class T, unsigned int U> ostream& operator<<(ostream& out, const array<T, U> &v){out << "["; REP(i, U) out << v[i] << ", "; out << "]"; return out;} template <class T, class U> ostream& operator<<(ostream& out, const pair<T, U> &par) {out << "[" << par.first << ";" << par.second << "]"; return out;} template <class T> ostream& operator<<(ostream& out, const set<T> &cont) { out << "{"; for( const auto &x:cont) out << x << ", "; out << "}"; return out; } template <class T, class U> ostream& operator<<(ostream& out, const map<T, U> &cont) {out << "{"; for( const auto &x:cont) out << x << ", "; out << "}"; return out; } template<class T> ostream& operator<<(ostream& out, const vector<T> &v){ out << "["; REP(i, v.size()) out << v[i] << ", "; out << "]"; return out;} template<class T> istream& operator>>(istream& in, vector<T> &v){ for(auto &x : v) in >> x; return in; } int trivial_sort(int n, vector<int> &positions, vector<int>& P, vector<int> &Q){ int id = 0; REP(i, n){ REP(j, n){ if(positions[j] == i){ if(j != i){ swap(positions[i], positions[j]); P[id] = positions[i]; Q[id] = positions[j]; id++; break; } } } } return id; } void adapt(vector<int> &init, vector<int> &X, vector<int> &Y, vector<int> &P, vector<int> &Q){ vector<int> pos(init.size()); REP(i, init.size()){ pos[init[i]] = i; } auto swap2 = [&](int a, int b){ swap(init[a], init[b]); pos[init[a]] = a; pos[init[b]] = b; }; REP(i, X.size()){ swap2(X[i], Y[i]); P[i] = pos[P[i]]; Q[i] = pos[Q[i]]; swap2(P[i], Q[i]); } } int findSwapPairs(int n, int S[], int m, int X[], int Y[], int P[], int Q[]) { vector<int> nX(m); vector<int> nY(m); REP(i, m){ nX[i] = X[i]; nY[i] = Y[i]; } int ans = INF; int l = 0; int r = m - 1; vector<int> init_arr(n); vector<int> arr(n); REP(i, n) init_arr[i] = S[i]; vector<int> nP(m); vector<int> nQ(m); while(l <= r){ fill(all(nP), 0); fill(all(nQ), 0); arr = init_arr; int mid = (l + r) >> 1; REP(i, mid){ swap(arr[X[i]], arr[Y[i]]); } int num = trivial_sort(n, arr, nP, nQ); if(num <= mid){ ans = mid; r = mid - 1; } else{ l = mid + 1; } } //ans = 3; fill(all(nP), 0); fill(all(nQ), 0); arr = init_arr; REP(i, ans){ swap(arr[X[i]], arr[Y[i]]); } trivial_sort(n, arr, nP, nQ); adapt(init_arr, nX, nY, nP, nQ); REP(i, ans) {P[i] = nP[i]; Q[i] = nQ[i];} return ans; }

Compilation message (stderr)

sorting.cpp: In function 'void adapt(std::vector<int>&, std::vector<int>&, std::vector<int>&, std::vector<int>&, std::vector<int>&)':
sorting.cpp:20:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 | #define FOR(i,j,k,in) for(int i=(j); i < (k);i+=in)
      |                                        ^
sorting.cpp:22:18: note: in expansion of macro 'FOR'
   22 | #define REP(i,b) FOR(i,0,b,1)
      |                  ^~~
sorting.cpp:76:5: note: in expansion of macro 'REP'
   76 |     REP(i, init.size()){
      |     ^~~
sorting.cpp:20:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 | #define FOR(i,j,k,in) for(int i=(j); i < (k);i+=in)
      |                                        ^
sorting.cpp:22:18: note: in expansion of macro 'FOR'
   22 | #define REP(i,b) FOR(i,0,b,1)
      |                  ^~~
sorting.cpp:84:5: note: in expansion of macro 'REP'
   84 |     REP(i, X.size()){
      |     ^~~
#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...