제출 #486892

#제출 시각아이디문제언어결과실행 시간메모리
486892HaidaraArranging Shoes (IOI19_shoes)C++17
100 / 100
158 ms36752 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+45;
 
ll n,a[N];
ll drvo[4*N];
bool gotov[2*N];
 
void build(int i,int j,int node){
    if(i == j){
        drvo[node] = 1;
        return;
    }
    int mid = i+(j-i)/2;
    build(i,mid,2*node);
    build(mid+1,j,2*node+1);
    drvo[node] = drvo[2*node]+drvo[2*node+1];
}
 
void update(int i,int j,int pos,int node){
    if(i == j){
        drvo[node] = 0;
        return;
    }
    int mid = i+(j-i)/2;
    if(pos <= mid){
        update(i,mid,pos,2*node);
    }
    else{
        update(mid+1,j,pos,2*node+1);
    }
    drvo[node] = drvo[2*node]+drvo[2*node+1];
}
 
ll get(int i,int j,int l,int r,int node){
    if(j < l || i > r){
        return 0;
    }
    if(l <= i && r >= j){
        return drvo[node];
    }
    int mid = i+(j-i)/2;
    return get(i,mid,l,r,2*node)+get(mid+1,j,l,r,2*node+1);
}
 
set <int> s[2*N];
 
ll count_swaps(vector <int> v){
    n = v.size();
    for(int i = 1; i <= n; i++){
        a[i] = v[i-1];
    }
    for(int i = 1; i <= n; i++){
        s[a[i]+n].insert(i);
    }
    build(1,n,1);
    ll sol = 0;
    for(int i = 1; i <= n; i++){
        if(gotov[i]){
            continue;
        }
        ll poz = *s[-a[i]+n].begin();
        s[a[i]+n].erase(i);
        s[-a[i]+n].erase(poz);
        sol += get(1,n,i,poz,1)-2;
        if(a[i] > 0){
            sol++;
        }
        //cout << i << " " << poz << " " << sol << endl;
        update(1,n,i,1);
        update(1,n,poz,1);
        gotov[i] = gotov[poz] = 1;
    }
    return sol;
}
#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...