제출 #159235

#제출 시각아이디문제언어결과실행 시간메모리
159235RoundMangoArranging Shoes (IOI19_shoes)C++14
100 / 100
419 ms276564 KiB
# include <bits/stdc++.h>
using namespace std;
queue <long long> q[2][200000];
long long n, idx, a[200000], ans, k, kx, xx[200000], m;
int alg (long long x) {
    int num = 0;
    for (int i = x; i >= 1; i -= (i&(-i)) ) num += xx[i];
    return num;
}
void upd (int x, int y) {
    for (int i = x; i <= n; i += (i&(-i)) ) xx[i] += y;
}
//int main() {
//	cin>>n;
//	for (int i = 1; i <= 2*n; i++) cin>>a[i];
long long count_swaps(std::vector <int> v) {
	n = v.size();
	for (long long i = 0; i < n; i++) a[i+1] = v[i];
	for (int i = 1; i <= n; i++) upd(i, 1);
	for(int i = 1; i <= n; i++) {
	    if (a[i] < 0) {
	    	if (q[1][abs(a[i])].empty()) q[0][abs(a[i])].push(i);  
			else {
				ans += alg(i-1) - alg(q[1][abs(a[i])].front()-1);
				upd(q[1][abs(a[i])].front(), 1);
				upd(i, -1);
				q[1][abs(a[i])].pop();
				}
			}
		else {
			if (q[0][a[i]].empty()) q[1][a[i]].push(i);
			else {
				ans += alg(i-1) - alg(q[0][a[i]].front()-1) - 1;
				upd(q[0][a[i]].front(), 1);
				upd(i, -1);
				q[0][a[i]].pop();
			}
		}
	}
	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...