Submission #1255231

#TimeUsernameProblemLanguageResultExecution timeMemory
1255231nerrrminArranging Shoes (IOI19_shoes)C++20
100 / 100
76 ms22964 KiB
#include "shoes.h" #include<bits/stdc++.h> #define pb push_back using namespace std; const long long maxn = 2e5 + 10; long long a[maxn], n; long long merge_sort(long long l, long long r) { if(l == r)return 0; long long mid = (l + r)/2; long long onleft = merge_sort(l, mid); long long onright = merge_sort(mid+1, r); long long ans = onleft + onright; long long i = l, j = mid+1; vector < long long > w; while(i <= mid && j <= r) { if(a[i] < a[j]) { w.pb(a[i]); i ++; } else { w.pb(a[j]); j ++; ans += (mid - i + 1); } } while(i <= mid) { w.pb(a[i]); i ++; } while(j <= r) { w.pb(a[j]); j ++; } long long p = 0; for (long long i = l; i <= r; ++ i) { a[i] = w[p]; p ++; } return ans; } vector < int > lt[maxn], rt[maxn]; bool cmp(pair < int, int > p1, pair < int, int > p2) { int min1 = min(p1.first, p1.second); int min2 = min(p2.first, p2.second); return (min1 < min2); } long long count_swaps(std::vector< int > s) { long long i = 1; for (auto x: s) { if(x < 0)lt[abs(x)].pb(i); else rt[abs(x)].pb(i); i ++; } n = s.size(); long long pos = 0; vector < pair < int, int > > g; for (long long i = 1; i <=n ; ++ i) { int sz = lt[i].size(); for (int j = 0; j < sz; ++ j) { long long f = lt[i][j]; long long s = rt[i][j]; g.pb(make_pair(f, s)); } } sort(g.begin(), g.end(), cmp); for (auto &[pos1, pos2]: g) { a[pos1] = pos; pos ++; a[pos2] = pos; pos ++; } return merge_sort(1, n); }
#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...