제출 #1265033

#제출 시각아이디문제언어결과실행 시간메모리
1265033hitsuujArranging Shoes (IOI19_shoes)C++20
100 / 100
373 ms149884 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back


const long long lim=3e5;
long long n;
long long tri[lim+10];
long long seek(long long x){
	long long res=0;
	while(x<=n){
		res+=tri[x];
		x+=x&-x;
	}
	return res;
}
void upd(long long x){
	while(x>0){
		tri[x]++;
		x-=x&-x;
	}
}
long long count_swaps(std::vector<int> s) {
	n=s.size();
	map<long long,queue<long long>>q;
	vector<long long>tan(n);
	long long cnt=1;
	for(long long i=0;i<n;i++) q[s[i]].push(i);
	for(long long i=0;i<n;i++){
		if(tan[i])continue;
        long long pas=q[-s[i]].front();
        q[-s[i]].pop();
		q[s[i]].pop();
		if(s[i]<0) tan[i]=cnt;
		else tan[pas]=cnt;
        cnt++;
		if(s[i]>0) tan[i]=cnt;
		else tan[pas]=cnt;
        cnt++;
	}
    long long ans=0;
    for(long long i=0;i<n;i++){
        ans+=seek(tan[i]);
        upd(tan[i]);
    }
	for(int i=0;i<=lim;i++)tri[i]=0;
    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...