제출 #602080

#제출 시각아이디문제언어결과실행 시간메모리
602080ttamxArranging Shoes (IOI19_shoes)C++14
50 / 100
328 ms298432 KiB
#include "shoes.h"
#include<bits/stdc++.h>
#define ll long long

using namespace std;

const int N=1e5+5;

int n;
ll f[N],ans;
map<int,queue<int>> mp;

void add(int i,int v){
    while(i<N){
        f[i]+=v;
        i+=i&-i;
    }
}

ll read(int i){
    ll ret=0;
    while(i>0){
        ret+=f[i];
        i-=i&-i;
    }
    return ret;
}

ll count_swaps(std::vector<int> s) {
	n=s.size();
	for(int i=1;i<=n;++i)add(i,1);
	for(int i=1;i<=n;++i){
        int a=s[i-1];
        if(!mp[-a].empty()){
            ll tmp=read(i)-read(mp[-a].front()-(0?1:a<0))-1;
            ans+=tmp;
            //printf("move %d from %d to %d, used %d\n",a,i,mp[-a].front(),tmp);
            add(i,-1);
            add(mp[-a].front(),1);
            mp[-a].pop();
        }else{
            //printf("add %d at %d\n",a,i);
            mp[a].emplace(i);
        }
	}
	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...