Submission #317989

#TimeUsernameProblemLanguageResultExecution timeMemory
317989Drew_Arranging Shoes (IOI19_shoes)C++14
Compilation error
0 ms0 KiB
//#include "shoes.h"
#include <cstdio>
#include <cassert>
#include <vector>
#include <queue>
#include <iostream>

using namespace std;

int const N = 1e5 + 7;
int bit[2*N] = {};

void add(int x, int val)
{
	x++;
	while (x < 2*N)
		bit[x] += val, x += (x & -x);
}

int sum(int x)
{
	x++;
	int res = 0;
	while (x)
		res += bit[x], x -= (x & -x);
	return res;
}

queue<int> q[N];
bool type[N]; //false: left, true: right

long long count_swaps(std::vector<int> s)
{
	long long res = 0;
	for (int i = 0; i < s.size(); ++i)
	{
		if (q[abs(s[i])].empty() || !type[abs(s[i])] && s[i] < 0 || type[abs(s[i])] && s[i] > 0)
		{
			q[abs(s[i])].push(i);
			if (s[i] < 0) type[abs(s[i])] = false;
			else type[abs(s[i])] = true;
		}
		else
		{
			int target = q[abs(s[i])].front();
			q[abs(s[i])].pop();
		
			//cout << i << " -> " << target << ", shifted: " << sum(target) << ", cost: " << i - target - sum(target) << '\n';

			res += i - target - sum(target);
			if (s[i] > 0) res--;

			add(target, 1);
			add(i, -1);
		}
	}
	return res;
}

int main() {
	int n;
	assert(1 == scanf("%d", &n));
	vector<int> S(2 * n);
	for (int i = 0; i < 2 * n; i++)
		assert(1 == scanf("%d", &S[i]));
	fclose(stdin);

	long long result = count_swaps(S);

	printf("%lld\n", result);
	fclose(stdout);
	return 0;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:35:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |  for (int i = 0; i < s.size(); ++i)
      |                  ~~^~~~~~~~~~
shoes.cpp:37:48: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   37 |   if (q[abs(s[i])].empty() || !type[abs(s[i])] && s[i] < 0 || type[abs(s[i])] && s[i] > 0)
      |                               ~~~~~~~~~~~~~~~~~^~~~~~~~~~~
shoes.cpp:37:79: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   37 |   if (q[abs(s[i])].empty() || !type[abs(s[i])] && s[i] < 0 || type[abs(s[i])] && s[i] > 0)
      |                                                               ~~~~~~~~~~~~~~~~^~~~~~~~~~~
/tmp/ccqL4jmA.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/cclxjQa1.o:shoes.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status