제출 #1290824

#제출 시각아이디문제언어결과실행 시간메모리
1290824lucasdmyArranging Shoes (IOI19_shoes)C++20
10 / 100
47 ms69912 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;
long long int inv=0;
vector<int>ord(MAXN);
void merge_sort(int start, int end){
    if(start==end){
        return;
    }
    int middle=(start+end)>>1;
    merge_sort(start, middle);
    merge_sort(middle+1, end);
    int p1=start, p2=middle+1;
    vector<int>aux;
    while(p1!=middle+1 or p2!=end+1){
        if(p1==middle+1){
            aux.push_back(ord[p2]);
            p2++;
        }else if(p2==end+1){
            aux.push_back(ord[p1]);
            p1++;
        }else if(ord[p1]<ord[p2]){
            aux.push_back(ord[p1]);
            p1++;
        }else{
            aux.push_back(ord[p2]);
            p2++;
            inv+=middle+1-p1;
        }
    }
    for(int k=start;k<=end;k++){
        ord[k]=aux[k-start];
    }
}
long long int count_swaps(vector<int>v){
    int cont=0;
    vector<queue<int>>aux(MAXN);
    for(int k=0;k<v.size();k++){
        if(v[k]<0){
            cont++;
            ord[k]=2*cont-1;
            aux[-v[k]].push(2*cont);
        }
    }
    for(int k=0;k<v.size();k++){
        if(v[k]>0){
            ord[k]=aux[v[k]].front();
            aux[v[k]].pop();
        }
    }
    merge_sort(0, v.size()-1);
    return inv;
}
/*int main(){
    int n;
    cin>>n;
    vector<int>v(2*n);
    for(int k=0;k<2*n;k++){
        cin>>v[k];
    }
    cout<<count_swaps(v);
}*/
#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...