제출 #602089

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

using namespace std;

const int N=2e5+5;

int n;
ll f[N],ans;
queue<int> q[2][N];

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