Submission #143540

#TimeUsernameProblemLanguageResultExecution timeMemory
143540abekerArranging Shoes (IOI19_shoes)C++17
10 / 100
15 ms14476 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int MAXN = 2e5 + 5;

struct fenwick {
	vector <int> fen;
	fenwick(int n) {
		fen.resize(n + 5);
	}
	void update(int x) {
		for (x++; x < fen.size(); x += x & -x)
			fen[x]++;
	}
	int get(int x) {
		int res = 0;
		for (x++; x; x -= x & -x)
			res += fen[x];
		return res;
	}
};

int N;
vector <int> lft[MAXN], rig[MAXN], perm[MAXN];
	
ll inversions(vector <int> v) {
	reverse(v.begin(), v.end());
	fenwick tmp(v.size());
	ll res = 0;
	for (auto it : v) {
		res += tmp.get(it);
		tmp.update(it);
	}
	return res;
}

ll count_swaps(vector <int> shoes) {
	N = shoes.size();
	vector <int> todo(N, -1);
	for (int i = 0; i < N; i++) {
		int sz = abs(shoes[i]);
		if (shoes[i] < 0) {
			perm[sz].push_back(2 * lft[sz].size());					
			lft[sz].push_back(i);
		}
		else {
			perm[sz].push_back(2 * rig[sz].size() + 1);
			rig[sz].push_back(i);
		}
	}
	
	ll sol = 0;
	for (int i = 0; i < N; i++) {
		sol += inversions(perm[i]);
		for (int j = 0; j < lft[i].size(); j++) 
			todo[max(lft[i][j], rig[i][j])] = min(lft[i][j], rig[i][j]);
	}
	
	fenwick fin(N);
	for (int i = 0; i < N; i++) 
		if (todo[i] != -1) {
			sol += fin.get(N) - fin.get(todo[i]);
			fin.update(todo[i]);
			fin.update(i);
		}
	
	return sol;
}

Compilation message (stderr)

shoes.cpp: In member function 'void fenwick::update(int)':
shoes.cpp:14:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (x++; x < fen.size(); x += x & -x)
             ~~^~~~~~~~~~~~
shoes.cpp: In function 'll count_swaps(std::vector<int>)':
shoes.cpp:57:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < lft[i].size(); j++) 
                   ~~^~~~~~~~~~~~~~~
#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...