Submission #294960

#TimeUsernameProblemLanguageResultExecution timeMemory
294960theStaticMindArranging Shoes (IOI19_shoes)C++14
100 / 100
133 ms23568 KiB
#include <bits/stdc++.h>
#include "shoes.h"
using namespace std;

struct Fenwick{
	vector<int> bit;

	Fenwick(){
		bit = vector<int> (1e6, 0);
	}

	void modify(int j, int v){
		j++;
		for(;j<1e6;j+=j&-j) bit[j] += v;
	}
	int query(int j){
		j++;
		int v = 0;
		for(;j;j-=j&-j) v += bit[j];
		return v;
	}
	int query(int a, int b){
		if(b < a) swap(a, b);
		return query(b) - query(a);
	}
} F;

long long count_swaps(std::vector<int> s) {
	int n = s.size();
	vector<int> A[n + 1], B[n + 1];

	for(int i = 0; i < n; i++){
		if(s[i] < 0) A[-s[i]].push_back(i);
		else B[s[i]].push_back(i);
	}

	vector<pair<int, int> > Q;

	long long cnt = 0;
	for(int i = 0; i <= n; i++){
		for(int j = 0; j < A[i].size(); j++){
			if(B[i][j] < A[i][j]){
				cnt++;
				swap(A[i][j], B[i][j]);
			}
			Q.push_back({A[i][j], B[i][j]});
		}
	}

	sort(Q.begin(), Q.end(), [&](pair<int, int> a, pair<int, int> b){
		return a.second < b.second;
	});

	for(auto p : Q){
		int l = p.first;
		int r = p.second;
		cnt += F.query(l, r);
		F.modify(l, 1);
		F.modify(r, 1);
	}

	return cnt;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:41:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |   for(int j = 0; j < A[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...