Submission #836544

#TimeUsernameProblemLanguageResultExecution timeMemory
836544abczzArranging Shoes (IOI19_shoes)C++14
10 / 100
30 ms18892 KiB
#include "shoes.h"
#include <iostream>
#include <vector>
#include <cstdlib>
#include <map>
#define ll long long

using namespace std;

ll n, f, x, st[400000], id[2][100000];
vector <ll> V[2][100000], X;
void build(ll id, ll l, ll r) {
	if (l == r) {
		st[id] = 1;
		return;
	}
	ll mid = (l+r)/2;
	build(id*2, l, mid);
	build(id*2+1, mid+1, r);
	st[id] = st[id*2] + st[id*2+1];
}

ll query(ll id, ll l, ll r, ll ql, ll qr) {
	if (qr < l || r < ql) return 0;
	else if (ql <= l && r <= qr) return st[id];
	ll mid = (l+r)/2;
	return query(id*2, l, mid, ql, qr) + query(id*2+1, mid+1, r, ql, qr);
}

void update(ll id, ll l, ll r, ll q) {
	if (l == r) {
		st[id] = 0;
		return;
	}
	ll mid = (l+r)/2;
	if (q <= mid) update(id*2, l, mid, q);
	else update(id*2+1, mid+1, r, q);
	st[id] = st[id*2] + st[id*2+1];
}

long long count_swaps(std::vector<int> s) {
  build(1, 0, s.size()-1);
	f = 0;
	for (int i=0; i<s.size(); ++i) {
		if (s[i] < 0) {
			X.push_back(i);
		}
		V[(s[i] < 0)][abs(s[i])-1].push_back(i);
	}
	for (auto u : X) {
		f += query(1, 0, s.size()-1, 0, u)-1;
		update(1, 0, s.size()-1, u);
		auto v = V[0][abs(s[u])-1][id[0][abs(s[u])-1]];
		f += query(1, 0, s.size()-1, 0, v)-1;
		update(1, 0, s.size()-1, v);
		++id[0][abs(s[u])-1];
	}
	return f;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:44:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |  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...