제출 #1292401

#제출 시각아이디문제언어결과실행 시간메모리
1292401MMihalevArranging Shoes (IOI19_shoes)C++20
10 / 100
1109 ms205464 KiB
#include<iostream>
#include<vector>
#include<queue>
#include<set>
#include "shoes.h"
using namespace std;
const int MAX_N=3e5+5;
deque<int>le,re[MAX_N];
int tree[MAX_N];
int N;
void Update(int pos)
{
    pos++;
    for(;;)
    {
        if(pos>N)break;
        tree[pos]++;
        pos+=((pos)&(-pos));
    }
}
int Find(int pos)
{
    int res=0;
    pos++;
    for(;;)
    {
        if(pos<1)break;
        res+=tree[pos];
        pos-=((pos)&(-pos));
    }
    return res;
}
int pos[MAX_N];
long long count_swaps(std::vector<int> s)
{
    N=2*s.size();

    for(int i=0;i<s.size();i++)
    {
        pos[i]=i;
        if(s[i]<0)le.push_back(i);
        else re[s[i]].push_back(i);
    }

    long long ans=0;
    int col;
    for(int i=0;i<s.size();i++)
    {
        int wh=i%2;
        if(wh==0)
        {
            ans+=pos[le.front()]-i;
            col=-s[le.front()];
            for(int j=le.front()-1;pos[j]>=i;j--)pos[j]++;
            le.pop_front();
        }
        else
        {
            ans+=pos[re[col].front()]-i;
            for(int j=re[col].front()-1;pos[j]>=i;j--)pos[j]++;
            re[col].pop_front();
        }
    }

    return ans;
}
#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...