제출 #1253518

#제출 시각아이디문제언어결과실행 시간메모리
1253518avohadoArranging Shoes (IOI19_shoes)C++20
100 / 100
215 ms273652 KiB
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define maxn 200005
#define f first
#define s second
#define ll long long
#define pb(x) push_back(x)
int bit[maxn];
int get(int i, int n){
    int j=i, x=0;
    while(j>0){
        x+=bit[j];
        j-=j&(-j);
    }
    return x;
}
void upd(int i, int n){
    int j=i;
    while(j<=n){
        bit[j]++;
        j+=j&(-j);
        
    }
}
int b[maxn];
int64_t count_swaps(vector<int> v){
    int n=(int)v.size();
    queue<int> s[2][n+1];
    long long ans=0;
    for(int i=0; i<n; i++){
        s[(v[i]>0)][abs(v[i])].push(i);
    }
    for(int i=0; i<n; i++){
        if(b[i])continue;
        int x=s[(v[i]>0)][abs(v[i])].front(),y=s[!(v[i]>0)][abs(v[i])].front();
        b[y]=1;s[(v[i]>0)][abs(v[i])].pop();s[!(v[i]>0)][abs(v[i])].pop();
        ans+=y-x-1-get(y, n)+get(x, n)+(v[i]>0);
        upd(y, n);
    }
    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...