Submission #1350786

#TimeUsernameProblemLanguageResultExecution timeMemory
1350786Rawlat_vanakArranging Shoes (IOI19_shoes)C++20
Compilation error
0 ms0 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define speedIO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define mod 1000000007
#define f first
#define s second
#define pii pair<int,int>
#define pb push_back



vector<int> seg;


void build(int l, int r, int v){
	if(l>r){
		return;
	}
	if(l==r){
		seg[v]=1;
		return;
	}
	int m=(l+r)/2;
	build(l,m,2*v);
	build(m+1,r,2*v+1);
	seg[v]=seg[2*v]+seg[2*v+1];
}


void update(int l, int r, int v, int id, int x){
	if(l>r){
		return;
	}
	if(l==r){
		seg[v]+=x;
		return;
	}
	int m=(l+r)/2;
	if(id<=m){
		update(l,m,2*v,id,x);
	}else{
		update(m+1,r,2*v+1,id,x);
	}
	seg[v]=seg[2*v]+seg[2*v+1];
}


int get(int l, int r, int v, int cl, int cr){
	if(l>r){
		return 0;
	}
	if(cl>cr){
		return 0;
	}
	if(l==cl and r==cr){
		return seg[v];
	}
	int m=(l+r)/2;
	return get(l,m,2*v,cl,min(m,cr))+get(m+1,r,2*v+1,max(m+1,cl),cr);
}


int count_swaps(vector<int> s){
	int n=s.size()/2;
	vector<int> left,right;
	map<int,queue<int>> socks;
	for(int i=0;i<2*n;i++){
		if(!socks[-s[i]].empty()){
			if(s[i]>0){
				right.pb(i);
				left.pb(socks[-s[i]].front());
				socks[-s[i]].pop();
			}else{
				left.pb(i);
				right.pb(socks[-s[i]].front());
				socks[-s[i]].pop();
			}
		}else{
			socks[s[i]].push(i);
		}
	}
	vector<pii> order(n);
	int ans=0;
	for(int i=0;i<n;i++){
		ans+=abs(left[i]-right[i])-1;
		order[i]={abs(left[i]-right[i]),i};
		if(left[i]>right[i]){
			ans++;
		}
	}
	sort(order.begin(),order.end());
	seg.resize(4*n+5);
	build(1,2*n,1);
	for(int i=0;i<n;i++){
		int id=order[i].s;
		int l=min(left[i]+1,right[i]+1);
		int r=max(left[i]+1,right[i]+1);
		//cout<<l<<' '<<r<<' '<<get(1,2*n,1,l,r)<<'\n';
		update(1,2*n,1,l,-1);
		update(1,2*n,1,r,-1);
		ans-=get(1,2*n,1,l,r);
	}




	return ans;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccqbgyvb.o: in function `main':
grader.cpp:(.text.startup+0x26b): undefined reference to `count_swaps(std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status