제출 #1237125

#제출 시각아이디문제언어결과실행 시간메모리
1237125AMnuArranging Shoes (IOI19_shoes)C++20
100 / 100
46 ms5300 KiB
#include "shoes.h"
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;

const int MAXN = 2e5+5;

int N, fen[MAXN];
ll ans;
pii P[MAXN];
vector <pii> L, R;

int pref(int x) {
	int sum = 0;
	for (int i=x;i;i-=i&-i) {
		sum += fen[i];
	}
	return sum;
}

void add(int x) {
	for (int i=x;i<=2*N;i+=i&-i) {
		fen[i]++;
	}
}

void ins(int x) {
	add(x);
	ans += x-pref(x);
}

ll count_swaps(vector<int> s) {
	N = s.size() / 2;
	for (int i=0;i<2*N;i++) {
		if (s[i] > 0) {
			R.push_back({s[i],i+1});
		}
		else {
			L.push_back({-s[i],i+1});
		}
	}
	sort(L.begin(),L.end());
	sort(R.begin(),R.end());
	for (int i=0;i<N;i++) {
		P[i].fi = L[i].se;
		P[i].se = R[i].se;
		if (P[i].fi > P[i].se) {
			swap(P[i].fi,P[i].se);
			ans++;
		}
	}
	sort(P,P+N);
	for (int i=0;i<N;i++) {
		ins(P[i].fi);
		ins(P[i].se);
	}
	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...