Submission #891451

#TimeUsernameProblemLanguageResultExecution timeMemory
891451Faisal_SaqibArranging Shoes (IOI19_shoes)C++17
100 / 100
247 ms23336 KiB
#include <vector> #include <set> #include <iostream> #include <map> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; const int N=200010; vector<int> ind[N]; int pon[N]; bool paired[N]; long long count_swaps(std::vector<int> s) { int n=s.size(); // set<int> sps; // for(auto i:s) // sps.insert(i); // if(n<=(16) or sps.size()<=4) // { // vector<int> sp; // for(int j=0;j<n;j++) // ind[s[j]+(n/2)].push_back(j); // for(auto i:s) // if(i<0) // sp.push_back(i); // long long ans=1e18; // sort(begin(sp),end(sp)); // int nm=sp.size(); // do{ // for(int j=0;j<=n;j++) // pon[j]=ind[j].size(); // tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> Set; // long long swaps=0; // for(int j=nm-1;j>=0;j--) // { // int x=-sp[j]+(n/2); // pon[x]--; // int indp=ind[x][pon[x]]; // Set.insert(indp); // swaps+=Set.order_of_key(indp); // x=sp[j]+(n/2); // pon[x]--; // indp=ind[x][pon[x]]; // Set.insert(indp); // swaps+=Set.order_of_key(indp); // } // ans=min(ans,swaps); // }while(next_permutation(begin(sp),end(sp))); // return ans; // } // else // { tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> Set; for(int j=0;j<n;j++) { Set.insert(j); s[j]+=(n/2); ind[s[j]].push_back(j); pon[s[j]]=0; } // -1,1 // n,-n // 2*n , 0 long long ans=0; for(int i=0;i<n;i++) { if(!paired[i]) { int to_pair=n-s[i]; int index1=ind[s[i]][pon[s[i]]]; pon[s[i]]++; int index2=ind[to_pair][pon[to_pair]]; pon[to_pair]++; int heavy_way=Set.order_of_key(index2)-Set.order_of_key(index1+1); Set.erase(index2); paired[index2]=1; ans+=heavy_way+(to_pair<(n/2)); } } return ans; // } }
#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...