제출 #1281849

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

#define int long long

const int N = 5e5 + 5;
int X[N] = {}, E[N] = {};

signed main(){
	
	ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
	
	int n; cin >> n;
	
	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 = lower_bound(idx1.begin(), idx1.end(), X[i]);
		auto it2 = lower_bound(idx2.begin(), idx2.end(), -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...