Submission #1281836

#TimeUsernameProblemLanguageResultExecution timeMemory
1281836muhammad-ahmadAdvertisement 2 (JOI23_ho_t2)C++20
59 / 100
2095 ms12652 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define endl '\n'

void solve(){
	int n; cin >> n;
	int X[n + 1] = {}, E[n + 1] = {};
	
	bool Sub1 = 1, Sub2 = (n <= 16);
	
	map<int, int> MA;
	
	for (int i = 1; i <= n; i++){
		cin >> X[i] >> E[i];
		if (MA[X[i]] == 0 or E[MA[X[i]]] < E[i]) MA[X[i]] = i;
		if (i > 1 && E[i] != E[i - 1]) Sub1 = 0;
	}
	
	map<int, vector<int>> C;
	int ans = 0;
	vector<int> a;
	for (int i = 1; i <= n; i++){
		C[E[i]].push_back(i);
		if (C[E[i]].size() == 1) a.push_back(E[i]);
	}
	int vis[n + 1] = {};
	sort(rbegin(a), rend(a));
	set<int> idx1, idx2;
	for (auto v : a){
		for (auto i : C[v]){
			
			auto it1 = lower_bound(idx1.begin(), idx1.end(), X[i]);
			auto it2 = lower_bound(idx2.begin(), idx2.end(), -X[i]);
			
			if (idx1.size() && it1 != idx1.end()){
				int x = *it1;
				int j = MA[x];
				// cout << i << ' ' << j << endl;
				
				if (abs(X[j] - X[i]) <= E[j] - E[i]) vis[i] = 2;
			}
			
			if (idx2.size() && it2 != idx2.end()){
				
				int x = *it2;
				x *= -1;
				int j = MA[x];
				
				if (abs(X[j] - X[i]) <= E[j] - E[i]) vis[i] = 2;
					// cout << i << ' ' << j << endl;
			}
			
			if (vis[i] == 0){
				
				// cout << i << endl;
				
				idx1.insert(X[i]);
				idx2.insert(-X[i]);
				vis[i] = 1;
				ans++;
			}
			
		}
	}
	
	
	cout << ans << endl;
	
}

signed main(){
	int tc = 1;
	// cin >> tc;
	while (tc--){
		solve();
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...