Submission #384229

#TimeUsernameProblemLanguageResultExecution timeMemory
384229meperdonas203Arranging Shoes (IOI19_shoes)C++17
100 / 100
523 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:42:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |   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...