제출 #399307

#제출 시각아이디문제언어결과실행 시간메모리
399307mshandilyaArranging Shoes (IOI19_shoes)C++14
10 / 100
1 ms204 KiB
#include <bits/stdc++.h> #include "shoes.h" using namespace std; long long count_swaps(std::vector<int> s) { long long sort_inversions = 0, total_inversions = 0; int N = (s.size()/2), left_pair = 0, right_pair = 0, cpos; std::vector<int> position(N), BIT(N); std::vector<std::queue<int>> compensated_inversions(N+1, queue<int> ()), positional_queue(N+1, queue<int> ()); for(int i = 2*N-1; i>=0; i--) { if(s[i]<0 && positional_queue[abs(s[i])].empty()) { compensated_inversions[abs(s[i])].push(left_pair); left_pair++; } else if(s[i]<0) { position[N-1-left_pair] = N-positional_queue[abs(s[i])].front(); positional_queue[abs(s[i])].pop(); left_pair++; } else if(!compensated_inversions[s[i]].empty()) { total_inversions += left_pair - compensated_inversions[s[i]].front(); right_pair++; position[N-compensated_inversions[s[i]].front()-1] = N-right_pair; compensated_inversions[s[i]].pop(); } else { right_pair++; positional_queue[s[i]].push(right_pair); } } for(int i = 0, j; i<N; i++) { j = i+1; while(j>0) { BIT[j-1]++; j -= (j & (-j)); } } for(int i = N-1; i>=0; i--) { cpos = position[i] + 2; while(cpos<=N) { sort_inversions += BIT[cpos-1]; cpos += (cpos & (-cpos)); } cpos = position[i] + 1; while(cpos>0) { BIT[cpos-1]--; cpos -= (cpos & (-cpos)); } } return (total_inversions+sort_inversions); }
#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...