#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = (1<<17) + 1;
int Mn[N<<1], Mx[N<<1], num[N<<1];
void Add(int i, int v, int cur = 1, int st = 1, int en = N){
if (i >= en or i < st)
return;
if (en - st == 1){
num[cur] += v;
if (num[cur] == 0)
Mn[cur] = N, Mx[cur] = 0;
else
Mn[cur] = Mx[cur] = st;
return;
}
int lc = cur + cur, rc = lc + 1, mid = (st + en) / 2;
Add(i, v, lc, st, mid);
Add(i, v, rc, mid, en);
Mn[cur] = min(Mn[lc], Mn[rc]);
Mx[cur] = max(Mx[lc], Mx[rc]);
}
int get1(int k, int cur = 1, int st = 1, int en = N){
if (en - st == 1)
return st;
int lc = cur + cur, rc = lc + 1, mid = (st + en) / 2;
if (Mn[rc] <= k)
return get1(k, rc, mid, en);
return get1(k, lc, st, mid);
}
int get2(int k, int cur = 1, int st = 1, int en = N){
if (en - st == 1)
return st;
int lc = cur + cur, rc = lc + 1, mid = (st + en) / 2;
if (Mx[lc] >= k)
return get2(k, lc, st, mid);
return get2(k, rc, mid, en);
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
for (int i=1;i<(N<<1);i++)
Mn[i] = N;
int n;
cin>>n;
vector<pair<int,int>> vec;
for (int i=1;i<=n;i++){
int h, k;
cin>>h>>k;
vec.push_back({h, k});
}
sort(vec.begin(), vec.end());
Add(1, -1);
Add(N - 2, -1);
for (auto [h, k] : vec){
int f = get1(h - k + 1);
int s = get2(h - k + 1) - 1;
int l1 = h - min(h, s);
// cout<<h<<" "<<k<<" "<<l1<<" "<<f<<" "<<s<<endl;
Add(s + 1, 1); Add(s + l1 + 1, -1);
Add(f, 1), Add(f + k - l1, -1);
}
Add(1, 1);
long long Ans = 0;
for (int i=1, sm = 0;i<=100004;i++){
sm += num[131071 + i];
// cout<<sm<<'\n';
Ans += (1LL * sm * (sm - 1)) / 2;
}
cout<<Ans<<'\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |