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 <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
struct point
{
    int A;
    int T;
};
bool operator < (point A, point B)
{
    if(A.T == B.T) return A.A < B.A;
    return A.T < B.T;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int N, M;
    cin >> N >> M;
    point P[M];
    for(int i = 0; i < M; i++) cin >> P[i].T;
    for(int i = 0; i < M; i++) cin >> P[i].A;
    sort(P, P+M, [] (point u, point v)
    {
        return u.A < v.A;
    });
    set<point> hands[M]; //first = time, second = loc
    for(point p: P)
    {
        // cerr << "point: " << p.A << ' ' << p.T << '\n';
        int lo = 0, hi = M-1;
        while(lo != hi)
        {
            int mid = (lo+hi)/2;
            bool lw = 0, rw = 0;
            auto f = hands[mid].lower_bound({-1, p.T});
            if(f == hands[mid].end()) rw = 1;
            else
            {
                if(abs(f->A - p.A) <= f->T - p.T) rw = 1;
            }
            if(f == hands[mid].begin())
                lw = 1;
            else
            {
                f--;
                if(abs(f->A - p.A) <= p.T - f->T) lw = 1;
            }
            if(lw && rw)
                hi = mid;
            else
                lo = mid+1;
        }
        // cerr << "inserted into " << lo << '\n';
        hands[lo].insert(p);
    }
    int ans = 0;
    for(int i = 0; i < M; i++) ans += !(hands[i].empty());
    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... |