제출 #1281895

#제출 시각아이디문제언어결과실행 시간메모리
1281895muhammad-ahmadAdvertisement 2 (JOI23_ho_t2)C++20
59 / 100
2099 ms90264 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main(){
	int n; cin >> n;
	int X[n + 1] = {}, E[n + 1] = {};
	
	map<int, int> ma, best; 
	
	for (int i = 1; i <= n; i++){
		cin >> X[i] >> E[i];
		ma[X[i]] = max(ma[X[i]], E[i]);
	}
	
	for (int i = 1; i <= n; i++){
		if (ma[X[i]] == E[i]) best[X[i]] = i;
	}
	
	map<int, vector<int>> idx;
	
	vector<int> iter;
	
	for (int i = 1; i <= n; i++){
		if (idx[E[i]].size() == 0) iter.push_back(E[i]);
		idx[E[i]].push_back(i);
	}
	
	sort(iter.rbegin(), iter.rend());
	vector<int> a;
	for (auto i : iter){
		for (auto j : idx[i]) a.push_back(j);
	}
	
	int ans = 0;
	set<int> idx1, idx2;
	for (auto i : a){
		auto it1 = idx1.lower_bound(X[i]);
		auto it2 = idx2.lower_bound(-X[i]);
		
		bool F = 0;
		
		if (it1 != idx1.end()){
			int val = *it1;
			int j = best[val];
			if (abs(X[j] - X[i]) <= E[j] - E[i]) F = 1;
		}
		if (it2 != idx2.end()){
			int val = *it2;
			int j = best[-1 * val];
			if (abs(X[j] - X[i]) <= E[j] - E[i]) F = 1;
		}
		if (!F) {
			ans++;
			idx1.insert(X[i]);
			idx2.insert(-X[i]);
		}
	}
	
	cout << ans << endl;
	
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...