Submission #154212

#TimeUsernameProblemLanguageResultExecution timeMemory
154212RafaelSusArranging Shoes (IOI19_shoes)C++14
100 / 100
855 ms152184 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <deque>
#include <map>

using namespace std;
const int maxn = 2e5 + 5;

long long T[maxn*4];

void update (int v, int tl, int tr, int pos, int val){
	if(tl == tr){
		T[v] += val;
		return;
	}
	int tm = (tl + tr) >> 1;
	if(pos <= tm)
		update(v + v, tl, tm, pos, val);
	else
		update(v + v +1, tm + 1, tr, pos, val);
	T[v] = T[v + v] + T[v + v + 1];
}


long long get(int v, int tl, int tr, int l, int r){
	if(l > r) return 0ll;
	if(tl == l && tr == r){
		return T[v];
	}
	int tm = (tl + tr) >> 1;
	return get(v + v, tl, tm, l, min (r, tm)) + get(v + v + 1, tm + 1, tr, max(l, tm + 1), r);

}

map <int, deque<int>> pos;

long long count_swaps(vector<int> S){
	for(int i = 0; i < S.size(); i++){
		pos[S[i]].push_back(i);
	}

	long long swaps = 0ll;
	vector <int> ok(S.size(), 0);

	for(int i = 0; i < S.size(); i++){
		if(ok[i])continue;
		deque <int>&NegPos = pos[-S[i]];
		int negPos = NegPos.front();
		pos[S[i]].pop_front();
		NegPos.pop_front();
		swaps += negPos - get(1, 0, S.size()-1, i, negPos) - i;
		update(1, 0, S.size() - 1, negPos, 1);
		ok[negPos] = 1;
		if(S[i] < 0)
			swaps--;
	}
	return swaps;
}

#ifdef RAFFF

int main(){
	vector <int> a(4);
	a[0] = 2; a[1] = 1; a[2] = -1; a[3] = -2;
	int i;
	cout << count_swaps(a) << '\n';
	cin >> i;
    return 0;
}
#endif

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:39:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < S.size(); i++){
                 ~~^~~~~~~~~~
shoes.cpp:46:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < S.size(); i++){
                 ~~^~~~~~~~~~
#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...