Submission #1164985

#TimeUsernameProblemLanguageResultExecution timeMemory
1164985pinbuAdvertisement 2 (JOI23_ho_t2)C++20
10 / 100
922 ms112384 KiB
#include <bits/stdc++.h> using namespace std; const int N = 500005; const long long oo = 1e18; int n; pair<int, int> a[N], b[N]; map<pair<int, int>, vector<int>> m1, m2; vector<int> idas, idbs; void solve(void) { cin >> n; for (int i = 1, x, e; i <= n; i++) { cin >> x >> e; a[i] = {x, x + e}; b[i] = {x, x - e}; m1[a[i]].emplace_back(i); m2[b[i]].emplace_back(i); } sort(a + 1, a + 1 + n); sort(b + 1, b + 1 + n); for (int i = n; i; i--) { while (!idas.empty() && a[i].second >= a[idas.back()].second) idas.pop_back(); idas.emplace_back(i); } reverse(begin(idas), end(idas)); for (int i = 1; i <= n; i++) { while (!idbs.empty() && b[i].second <= b[idbs.back()].second) idbs.pop_back(); idbs.emplace_back(i); } int ans = 0; for (int i = 0, j = 0; i < (int)idas.size() && j < (int)idbs.size();) { int i1 = idas[i], i2 = idbs[j]; if (a[i1].first < b[i2].first) i++; else if (a[i1].first > b[i2].first) j++; else { for (int ii = 0, jj = 0; ii < (int)m1[a[i1]].size() && jj < (int)m2[b[i2]].size();) { int x = m1[a[i1]][ii], y = m2[b[i2]][jj]; if (x < y) ii++; else if (x > y) jj++; else { ans++; break; } } i++; j++; } } cout << ans; } signed main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...