Submission #1299229

#TimeUsernameProblemLanguageResultExecution timeMemory
1299229PieArmyThe Potion of Great Power (CEOI20_potion)C++20
100 / 100
2433 ms79684 KiB
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)

int n;
int h[100023];
map<int,vector<int>>v[100023];
map<int,int>mp[100023];
vector<int>sta[100023];

void init(int N, int D, int H[]){
	n=N;
	for(int i=0;i<n;i++){
		h[i]=H[i];
		v[i][0]=vector<int>();
	}
}

void f(int tar,int val,int tim){
	mp[tar][tim]=val;
	sta[tar].pb(val);
	if(sta[tar].size()==10){
		set<int>cnt;
		for(int x:sta[tar]){
			if(cnt.count(x))cnt.erase(x);
			else cnt.insert(x);
		}
		sta[tar].clear();
		vector<int>&las=(--v[tar].end())->sc;
		vector<int>&cur=v[tar][tim];
		for(int x:las){
			if(cnt.count(x)){
				cnt.erase(x);
				continue;
			}
			cur.pb(x);
		}
		for(int x:cnt){
			cur.pb(x);
		}
		cnt.clear();
	}
}

void curseChanges(int U, int A[], int B[]){
	for(int i=1;i<=U;i++){
		int a=A[i-1],b=B[i-1];
		f(a,b,i);
		f(b,a,i);
	}
}

_Rb_tree_iterator<pair<const int,vector<int>>>itr1;
_Rb_tree_const_iterator<pair<const int,int>>itr;

vector<int> cal(int tar,int tim){
	itr1=--v[tar].upper_bound(tim);
	vector<int>&las=itr1->sc;
	int curtim=itr1->fr;
	itr=mp[tar].upper_bound(curtim);
	set<int>cnt;
	while(itr!=mp[tar].end()&&itr->fr<=tim){
		if(cnt.count(itr->sc)){
			cnt.erase(itr->sc);
		}
		else cnt.insert(itr->sc);
		itr++;
	}
	vector<int>res;
	for(int x:las){
		if(cnt.count(x)){
			cnt.erase(x);
			continue;
		}
		res.pb(x);
	}
	for(int x:cnt){
		res.pb(x);
	}
	sort(res.begin(),res.end(),[&](const int &x,const int &y){
		return h[x]<h[y];
	});
	return res;
}

int question(int x, int y, int v){
	int res=1e9;
	vector<int>a=cal(x,v),b=cal(y,v);
	int ust=0;
	for(int x:a){
		while(ust<b.size()&&h[b[ust]]<h[x])ust++;
		if(ust<b.size()){
			res=min(res,abs(h[x]-h[b[ust]]));
		}
		if(ust-1>=0){
			res=min(res,abs(h[x]-h[b[ust-1]]));
		}
	}
	return res;
}
#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...