Submission #916214

#TimeUsernameProblemLanguageResultExecution timeMemory
916214AiperiiiArranging Shoes (IOI19_shoes)C++14
30 / 100
109 ms15940 KiB
#include <bits/stdc++.h>
#include "shoes.h"
using namespace std;
#define all(x) x.begin(),x.end()
#define ff first
#define ss second
#define pb push_back
const int N=2e5+5;
long long t[N*4];
void build(int v,int tl,int tr){
   if(tl==tr)t[v]=1;
   else{
      int tm=(tl+tr)/2;
      build(v*2,tl,tm);
      build(v*2+1,tm+1,tr);
      t[v]=t[v*2]+t[v*2+1];
   }
}
void update(int v,int tl,int tr,int pos){
   if(tl==tr)t[v]=0;
   else{
      int tm=(tl+tr)/2;
      if(pos<=tm)update(v*2,tl,tm,pos);
      else update(v*2+1,tm+1,tr,pos);
      t[v]=t[v*2]+t[v*2+1];
   }
}
long long get(int v,int tl,int tr,int l,int r){
   if(r<tl or tr<l)return 0;
   if(l<=tl && tr<=r)return t[v];
   int tm=(tl+tr)/2;
   return get(v*2,tl,tm,l,r)+get(v*2+1,tm+1,tr,l,r);
}


long long count_swaps(vector<int> s) {
    int n=s.size();
    s.insert(s.begin(),0);
    build(1,1,n);
    vector <pair <int,int> > v[n+1];
    for(int i=1;i<=n;i++){
       if(s[i]>0)v[s[i]].pb({i,1});
       if(s[i]<0)v[-s[i]].pb({i,0});
    }
    vector <int> done(n+1);
    long long ans=0;
    for(auto val : s){
       int i=abs(val);
       if(done[i])continue;
       if(v[i].size()==0)continue;
       for(int j=0;j<v[i].size();j++){
          update(1,1,n,v[i][j].ff);
       }
       vector <int> x,y;
       int p=v[i][0].ff;
       
       for(int j=1;j<v[i].size();j++){
          ans+=get(1,1,n,p,v[i][j].ff);
       }
       for(int j=0;j<v[i].size();j++){
          if(j%2==0 && v[i][j].ss==1)x.pb(j);
          if(j%2==1 && v[i][j].ss==0)y.pb(j);
       }
       
       for(int j=0;j<x.size();j++){
          ans+=abs(x[j]-y[j]);
       }
       done[i]=1;
    }
    return ans;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:51:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |        for(int j=0;j<v[i].size();j++){
      |                    ~^~~~~~~~~~~~
shoes.cpp:57:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |        for(int j=1;j<v[i].size();j++){
      |                    ~^~~~~~~~~~~~
shoes.cpp:60:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |        for(int j=0;j<v[i].size();j++){
      |                    ~^~~~~~~~~~~~
shoes.cpp:65:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |        for(int j=0;j<x.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...