Submission #143868

#TimeUsernameProblemLanguageResultExecution timeMemory
143868Bodo171Arranging Shoes (IOI19_shoes)C++14
100 / 100
113 ms19960 KiB
#include "shoes.h"
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
const int nmax=200005;
vector<int> v[2][nmax];
struct pr
{
    int x,y;
}a[nmax];
bool comp(pr unu,pr doi)
{
    return ((unu.x+unu.y)<(doi.x+doi.y));
}
int fin[nmax],po[nmax];
int nr,i,j,mn,col,poz;
int abss(int x)
{
    if(x<0) return -x;
    return x;
}
int n;
int aib[nmax];
inline int lbit(int x)
{
    return ((x^(x-1))&x);
}
void update(int poz,int val)
{
    for(int idx=poz;idx<=2*n;idx+=lbit(idx))
        aib[idx]+=val;
}
int compute(int poz)
{
    int ret=0;
    for(int idx=poz;idx>0;idx-=lbit(idx))
        ret+=aib[idx];
    return ret;
}
long long count_swaps(vector<int> s) {
    n=s.size();
    n/=2;long long ans=0;
    for(int i=0;i<2*n;i++)
    {
        v[(s[i]>0)][abss(s[i])].push_back(i);
    }
    ans=0;
    for(i=1;i<=n;i++)
    {
        for(j=0;j<v[0][i].size();j++)
        {
            a[nr++]={v[0][i][j],v[1][i][j]};
        }
    }
    sort(a,a+nr,comp);
    for(i=0;i<nr;i++)
    {
        fin[a[i].x]=2*i;
        fin[a[i].y]=2*i+1;
    }
    for(i=0;i<2*n;i++)
    {
        ans+=1LL*(i-1LL*compute(fin[i]+1));
        update(fin[i]+1,1);
    }
	return ans;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:51:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(j=0;j<v[0][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...