Submission #1290962

#TimeUsernameProblemLanguageResultExecution timeMemory
1290962ChuanChenArranging Shoes (IOI19_shoes)C++20
45 / 100
111 ms139356 KiB
#include "shoes.h"
#include<bits/stdc++.h>
using namespace std;
#define debug(v) cerr << #v << ": " << v << "   ";
#define debugln(v) cerr << #v << ": " << v << endl;


typedef long long ll;
const int MAXN = 2e5+5;

int n;
stack<int> freq[MAXN];

int  pos2[2*MAXN];
int* pos = pos2+MAXN;
ll ans = 0;
int bit[MAXN];

int query(int pos){
	int x = 0;
	for(; pos > 0; pos -= ((-pos)&pos)) x+= bit[pos];
	return x;
}
void update(int pos){
	for(; pos <= MAXN; pos += ((-pos)&pos))
		bit[pos]++;
}

long long count_swaps(vector<int> s){
	vector<int> filt(s.size());
	ll cnt = 0;
	for(int i = 0; i < (int)s.size(); i++){
		if(s[i] < 0){
			cnt++;
			freq[-s[i]].push(i);
			filt[i] = -cnt;
		}
	}
	for(int i = s.size()-1; i >= 0; i--){
		if(s[i] > 0){
			filt[i] = -filt[freq[s[i]].top()];
			freq[s[i]].pop();
		}
	}

	vector<int> f;
	for(int i = s.size()-1; i >= 0; i--){
		if(filt[i] < 0) f.push_back(-2*filt[i]-1);
		else f.push_back(filt[i]*2);
		// f.push_back(filt[i]);
		// pos[filt[i]] = i;
	}
	for(int x : f){
		update(x);
		ans += query(x-1);
	}
	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...