Submission #386170

#TimeUsernameProblemLanguageResultExecution timeMemory
386170Christopher_RdzArranging Shoes (IOI19_shoes)C++14
100 / 100
547 ms148204 KiB
#include "shoes.h"
#include<bits/stdc++.h>
using namespace std;

void mapear(vector<int> &s){
    int contador = 0;
    map<long long int,queue<long long int> > mapa;
    for(auto &x: s){
        if(!mapa[-x].empty()){
            int indice = x;
            x =- mapa[-x].front();
            mapa[-indice].pop();
        }else{
            int valor = (x > 0) ? ++contador : -1 *(++contador);
            mapa[x].push(valor);
            x = valor;
        }
    }
}

long long int bit[400002];

long long int query(int indice){
    long long int suma=0;
    while(indice > 0){
        suma += bit[indice];
        indice -= (indice & (-indice));
    }
    return suma;
}

long long int query_2(int l,int r){
    return(query(r) - query(l - 1));
}

void update(int i, int valor, int n){
    while(i <= n){
        bit[i] += (long long int)valor;
        i += (i & (-i));
    }
}

long long count_swaps(vector<int> s) {
    long long int movs=0;
    mapear(s); 
    int n = s.size()+1;
    for(int i = 0;i <s.size(); i++){
    if(s[i] > 0 and query_2(abs(s[i]), abs(s[i])) == 0){
        movs++;
    }
    movs += query_2(abs(s[i]) + 1, n);
    update(abs(s[i]), 1, n);
  }
    return movs;
}

Compilation message (stderr)

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