Submission #1241437

#TimeUsernameProblemLanguageResultExecution timeMemory
1241437nasjesAdvertisement 2 (JOI23_ho_t2)C++20
100 / 100
1122 ms70896 KiB
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <bitset>
#include <string>
#include <cstring>
#include <iterator>
#include <random>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef long double ld;
const ll dim = 1e6+7;
//const ll mod = 1e9 + 7;
const ll inf = 1e18 + 77;
#define endl "\n"
#define fi first
#define pb push_back
#define se second
#define vll vector<ll>

ll n, l;
ll x[dim], e[dim];
pair<ll, ll> a[dim];
int main() {
    set<pll> s;
    cin>>n;
    multiset<ll> rt, lt;
    for(int i=1; i<=n; i++) {
        cin>>x[i]>>e[i];
        s.insert({x[i], e[i]});
    }
    n=s.size();
    ll id=1;
    for(auto el: s){
        a[id]=el;
        rt.insert({el.se-el.fi});
        id++;
    }
    ll ans=0;
    for(int i=1; i<=n; i++){
        ll e=a[i].se;
        ll x=a[i].fi;
        ll fl=0;
        rt.erase(rt.find(e-x));
        if(rt.size()>0){
            auto it=rt.upper_bound(e-x);
            if(it==rt.end()){
                it--;
                ll val=(*it);
               // cout<<e-x<<" "<<val<<endl;
                if(val>=e-x)fl=1;
            }
            else fl=1;
        }
        if(lt.size()>0){
            auto it=lt.upper_bound(e+x);
            if(it==lt.end()){
                it--;
                ll val=(*it);
              //  cout<<e+x<<" "<<val<<endl;
                if(val>=e+x)fl=1;
            }
            else fl=1;
        }

       // cout<<endl;
        lt.insert(e+x);
        if(fl==0)ans++;
    }
    cout<<ans<<endl;

    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...