Submission #1368030

#TimeUsernameProblemLanguageResultExecution timeMemory
1368030FaresSTHNile (IOI24_nile)C++20
32 / 100
58 ms13496 KiB
#include"bits/stdc++.h"
using namespace std;
using ll=long long;
#define S second
#define F first
struct artifact{ll w,a,b,c;};
const int mxn=1e5+5;
vector<int>p(mxn),sz(mxn);
int od;
int fp(int i){
	if(i==p[i])return i;
	return p[i]=fp(p[i]);
}
void mrg(int a,int b){
	a=fp(a),b=fp(b);
	if(sz[a]<sz[b])swap(a,b);
	if(sz[a]%2==1&&sz[b]%2==1)od-=2;
	sz[a]+=sz[b];
	p[b]=a;
}
vector<ll>calculate_costs(vector<int>w,vector<int>a,vector<int>b,vector<int>e){
	int n=w.size(),q=e.size();
	vector<artifact>v(n);
	set<pair<int,int>>s;
	vector<ll>res(q);
	vector<pair<int,int>>qrys;
	for(int i=0;i<n;i++)p[i]=i,sz[i]=1,od++;
	for(int i=0;i<q;i++)qrys.push_back({e[i],i});
	for(int i=0;i<n;i++)v[i]={w[i],a[i],b[i],a[i]-b[i]};
	sort(v.begin(),v.end(),[](auto a,auto b){return a.w<b.w;});
	for(int i=1;i<n;i++)s.insert({v[i].w-v[i-1].w,i});
	sort(qrys.begin(),qrys.end());
	for(int i=0;i<q;i++){
		while(s.size()&&s.begin()->F<=qrys[i].F){
			// cout<<s.begin()->S<<' '<<od<<' ';
			mrg(s.begin()->S,s.begin()->S-1);
			s.erase(s.begin());
			// cout<<od<<endl;
		}
		res[qrys[i].S]=n+od;
	}
	return res;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...