Submission #779045

#TimeUsernameProblemLanguageResultExecution timeMemory
779045mrwangArranging Shoes (IOI19_shoes)C++14
100 / 100
54 ms25200 KiB
#include "shoes.h"
#define TASKNAME "codeforce"
#define pb push_back
#define pli pair<int,int>
#define fi first
#define se second
#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL);
using namespace std;
using ll=long long;
const ll maxN=2e5+10;
const ll inf=1e18;
const ll mod=1e9+7;
ll sz[maxN];
vector<ll>vec[maxN][2];
ll match[maxN],arr[maxN],cnt=0,bit[maxN];
bool vis[maxN];
void update(ll i)
{
    while(i<maxN)
    {
        bit[i]++;
        i+=i&(-i);
    }
}
ll get(ll i)
{
    ll aa=0;
    while(i>0)
    {
        aa+=bit[i];
        i-=i&(-i);
    }
    return aa;
}
long long count_swaps(vector<int> S)
{
    ll n=S.size();
    for(int i=1;i<=n;i++) sz[i]=S[i-1];
    for(int i=1;i<=n;i++)
    {
        if(sz[i]<0)
        {
            vec[-sz[i]][0].pb(i);
        }
        else
        {
            vec[sz[i]][1].pb(i);
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<vec[i][0].size();j++)
        {
            match[vec[i][0][j]]=vec[i][1][j];
            match[vec[i][1][j]]=vec[i][0][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        vis[i]=false;
    }
    for(int i=1;i<=n;i++)
    {
        if(vis[i]==false)
        {
            vis[i]=true;
            vis[match[i]]=true;
            ll pos1,pos2;
            pos1=i;
            pos2=match[i];
            if(sz[i]>0) swap(pos1,pos2);
            arr[cnt+1]=pos1;
            arr[cnt+2]=pos2;
            cnt+=2;
        }
        else continue;
    }
    ll ans=0;
    for(int i=n;i>=1;i--)
    {
        //cout << arr[i]<<' ';
        ans+=get(arr[i]);
        update(arr[i]);
    }
    //cout << '\n';
    return ans;
}
/*void solve()
{
    cout << count_swaps({2, 1, -1, -2});
}
int main()
{
    fastio
    //freopen(TASKNAME".INP","r",stdin);
    //freopen(TASKNAME".OUT","w",stdout);
    solve();
}*/

Compilation message (stderr)

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