Submission #1311676

#TimeUsernameProblemLanguageResultExecution timeMemory
1311676aryanLightning Rod (NOI18_lightningrod)C++17
66 / 100
1103 ms195292 KiB
#include<bits/stdc++.h>
using namespace std;

using i64 = long long;

 
template <class T>
struct fenwick_ma{
    int n;
    vector<T> tree;
    fenwick_ma(int _n){
        n = _n;
        tree = vector<T>(n,-1);
    }
    
    void update(int i,T v){
        for(;i < n;i |= (i + 1)){
            tree[i] = max(tree[i],v);
        }
    }
    T query(int i){
        T ans = -1;
        for(;i >= 0;i = (i & (i + 1)) - 1){
            ans = max(ans,tree[i]);
        }
        return ans;
    }
};

template <class T>
struct fenwick_mi{
    int n;
    vector<T> tree;
    fenwick_mi(int _n){
        n = _n;
        tree = vector<T>(n,INT_MAX);
    }
    
    void update(int i,T v){
        for(;i >= 0;i = (i & (i + 1)) - 1){
            tree[i] = min(tree[i],v);
        }
    }
    T query(int i){
        T ans = INT_MAX;
        for(;i < n;i |= (i + 1)){
            ans = min(ans,tree[i]);
        }
        return ans;
    }
};

int main(){
        
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    cin >> n;
    vector<pair<int,int>> a(n);
    vector<int> su(n),di(n);
    for(int i = 0;i < n;i++){
        cin >> a[i].first >> a[i].second;
        su[i] = a[i].first + a[i].second;
        di[i] = a[i].first - a[i].second;
    }
    vector<int> ind(n);
    iota(ind.begin(),ind.end(),0);
    sort(ind.begin(),ind.end(),[&](int i,int j){
        return a[i].second < a[j].second;
    });

    int ans = 0;
    fenwick_ma<int> fma(n + 1);
    fenwick_mi<int> fmi(n + 1);
    for(int i = n - 1;i >= 0;i--){
        bool ok = false;
        int e = ind[i];
        int maxi = fma.query(e - 1);
        int mini = fmi.query(e + 1);
        if(maxi >= su[e]) ok = true;
        if(mini <= di[e]) ok = true;
        if(!ok){
            fma.update(e,su[e]);
            fmi.update(e,di[e]);
            ans ++;
        }
    }
    cout << ans << '\n';
    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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...