This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for(int i = a; i <= b; i++)
#define RFOR(i, a, b) for(int i = a; i >= b; i--)
#define ll long long
struct RangeFenwick {
vector<int> bit[2];
int size;
RangeFenwick(int n){
size = n + 1;
bit[0].assign(size + 1, 0), bit[1].assign(size + 1, 0);
}
void add(bool t, int i, int x){
for(; i < size; i += i & -i) bit[t][i] += x;
}
void range_add(int l, int r, int x){
add(0, l, x), add(0, r + 1, -x);
add(1, l, x * (l - 1)), add(1, r + 1, -x * r);
}
int pfx_helper(int t, int i){
int r = 0;
for(; i > 0; i -= i & -i) r += bit[t][i];
return r;
}
int pfx(int i){
return pfx_helper(0, i)*i - pfx_helper(1, i);
}
int pt(int i){
return pfx(i) - pfx(i - 1);
}
};
int main(){
int N;
cin >> N;
pair<int, int> M[N];
FOR(i, 0, N - 1){
int h, s;
cin >> h >> s;
M[i] = make_pair(h, s);
}
sort(M, M + N);
RangeFenwick T(N);
FOR(i, 0, N - 1){
int H = M[i].first, S = M[i].second;
int PM = T.pt(H - S + 1); // prev max sail
int a = 1, b = H; // a = lowest index with value <= PM
while(a < b){
int m = (a + b) / 2;
if(PM >= T.pt(m)){
b = m;
}else{
a = m + 1;
}
}
int a2 = 1, b2 = H; // a2 = highest index w value <= PM
while(a2 < b2){
int m = (a2 + b2 + 1) / 2;
if(PM <= T.pt(m)){
a2 = m;
}else{
b2 = m - 1;
}
}
//if(a2 != H) T.range_add(a2 + 1, H, 1);
//T.range_add(a, a2 - (H - S + 1 - a), 1);
}
/*ll R = 0, r = 0, p = -1;
RFOR(i, N, 1) if(T.pt(i) != 0) {
if(T.pt(i) - 1 != p) {
r += T.pt(i) - 1;
p = T.pt(i) - 1;
}
R += r;
}
cout << R << endl;*/
}
# | 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... |