Submission #169895

#TimeUsernameProblemLanguageResultExecution timeMemory
169895whtttArranging Shoes (IOI19_shoes)C++14
Compilation error
0 ms0 KiB
#include <vector> #include <iostream> #include <algorithm> #define ll long long using namespace std; ll count_swaps(vector<ll> S){ ll n = S.size()/2; if(n == 1){ if(S[0] < 0){ return 0; } else { return 1; } } vector<vector<ll>> vyskytR; vector<vector<ll>> vyskytL; for(ll i = 0;i <= n;i++){ vyskytL.push_back({}); vyskytR.push_back({}); } ll sol = 0; ll sqrtt = 1; while(sqrtt * sqrtt < 2*n){ sqrtt++; } ll sqrtDec[n/sqrtt]; ll sum[n]; for(ll i = 0;i < 2*n/sqrtt;i++){ sqrtDec[i] = 0; } for(ll i = 0;i < 2*n;i++){ sum[i] = 0; } for(ll i = 0;i < 2*n;i++){ if(S[i] < 0){ vyskytL[-S[i]].push_back(i); } else { vyskytR[S[i]].push_back(i); } } for(ll i = 0;i < n;i++){ reverse(vyskytR[i].begin(),vyskytR[i].end()); reverse(vyskytL[i].begin(),vyskytL[i].end()); } ll where = 0; ll where2 = 0; ll countt = 0; ll start; while(1){ if(where >= n){ break; } if(sum[where]==1){ where++; continue; } if(S[where] < 0){ where2 = vyskytR[-S[where]][vyskytR[-S[where]].size()-1]; // countt sa nastavi na pocet pouzitych medzi where a where2 countt = 0; start = where; while(1){ if(start > where2){ break; } if(start % sqrtt == 0 && start+sqrtt-1 <= where2){ countt += sqrtDec[start/sqrtt]; start += sqrtt; } else { countt += sum[start]; start++; } } sol += where2-where-1-countt; vyskytR[-S[where]].pop_back(); sum[where2] = 1; sqrtDec[where2/sqrtt]++; where++; vyskytL[-S[where-1]].pop_back(); //cout << -S[where-1] << "???" << endl; } else { where2 = vyskytL[S[where]][vyskytL[S[where]].size()-1]; // countt sa nastavi na pocet pouzitych medzi where a where2 countt = 0; start = where; while(1){ if(start > where2){ break; } if(start % sqrtt == 0 && start+sqrtt-1 <= where2){ countt += sqrtDec[start/sqrtt]; start += sqrtt; } else { countt += sum[start]; start++; } } sol += where2-where-countt; vyskytL[S[where]].pop_back(); sum[where2] = 1; sqrtDec[where2/sqrtt]++; where++; vyskytR[S[where-1]].pop_back(); } //cout << countt << endl; //cout << where-1 << " " << where2 << endl; //cout << sol << endl; //cout << "----" << endl; } return sol; } /* int main(int argc, const char * argv[]) { cout << count_swaps({2,1,-1,-2}) << endl; cout << count_swaps({-2,2,2,-2,-2,2}) << endl; cout << count_swaps({-1,1}) << endl; cout << count_swaps({2,-2}) << endl; cout << count_swaps({-3,2,1,-4,2,-2,3,4,-1,-2}) << endl; return 0; } */

Compilation message (stderr)

/tmp/ccl9yfzC.o: In function `main':
grader.cpp:(.text.startup+0x272): undefined reference to `count_swaps(std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status