Submission #1206265

#TimeUsernameProblemLanguageResultExecution timeMemory
1206265thelegendary08Arranging Shoes (IOI19_shoes)C++17
100 / 100
125 ms34832 KiB
#include "shoes.h" #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> #define int long long #define f0r(i,n) for(int i = 0; i<n; i++) #define pb push_back #define vi vector<int> #define vout(v) for(auto u : v)cout<<u<<' '; cout<<'\n'; #define dout(x) cout<<x<<' '<<#x<<'\n'; using namespace std; using namespace __gnu_pbds; typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> os; int count_swaps(std::vector<signed> s) { int n = s.size(); if(n == 2){ if(s[0] < 0)return 0; else return 1; } else{ /* vi a; vi b; vi c; vi d; f0r(i, n){ if(s[i] < 0){ a.pb(s[i]); c.pb(i); } else{ b.pb(s[i]); d.pb(i); } } int ans = 4e18; vi loc; f0r(i, n/2)loc.pb(i); vector<vi> opti; do{ vi loc2; f0r(i, n/2)loc2.pb(i); do{ bool ok = 1; for(int i = 0; i<n/2; i++){ if(a[loc[i]] != -b[loc2[i]]){ ok = 0; } } if(ok){ vi locc; f0r(i, n/2){ locc.pb(c[loc[i]]); locc.pb(d[loc2[i]]); } os ay; ay.insert(locc[n-1]); int cur = 0; for(int i = n-2; i>=0; i--){ cur += ay.order_of_key(locc[i]); ay.insert(locc[i]); } if(cur < ans){ ans = cur; vi thing; f0r(i, n/2){ thing.pb(-a[loc[i]]); } opti = {thing}; } else if(cur == ans){ ans = cur; vi thing; f0r(i, n/2){ thing.pb(-a[loc[i]]); } opti.pb(thing); } } }while(next_permutation(loc2.begin(), loc2.end())); }while(next_permutation(loc.begin(), loc.end())); dout(ans); for(auto u : opti){ vout(u); } int a1 = ans; */ vi rs; vi lok(n); vector<set<int>> lef(n + 1); vector<set<int>>rig(n + 1); int cur = 0; f0r(i, n){ if(s[i] > 0){ if(lef[s[i]].size() > 0){ lok[(*lef[s[i]].begin())] = cur; lef[s[i]].erase(lef[s[i]].begin()); lok[i] = cur + 1; cur += 2; } else{ rig[s[i]].insert(i); } } else{ if(rig[-s[i]].size() > 0){ lok[(*rig[-s[i]].begin())] = cur + 1; rig[-s[i]].erase(rig[-s[i]].begin()); lok[i] = cur; cur += 2; } else{ lef[-s[i]].insert(i); } } } //how many ppl after me are less than me // vout(lok); os aa; aa.insert(lok[n-1]); int ans = 0; for(int i = n-2; i>=0; i--){ ans += aa.order_of_key(lok[i]); aa.insert(lok[i]); } /* dout(ans); int a2 = ans; if(a1 != a2){ vout(s); } */ return ans; } return 1; }
#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...