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 <set>
#include <vector>
#include <algorithm>
using namespace std;
using pii = pair<int, int>;
using vi = vector<int>;
#define sz(x) int(x.size())
struct point
{
    int apt;
    int amt;
    int i;
};
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int N, M;
    cin >> N >> M;
    set<pii> S;
    int A[M], T[M];
    for(int i = 0; i < M; i++)
    {
        cin >> T[i];
    }
    for(int i = 0; i < M; i++)
    {
        cin >> A[i];
        S.insert({A[i], T[i]});
    }
    int Z = sz(S);
    vector<point> P(Z);
    for(int i = 0; i < Z; i++)
    {
        P[i].apt = S.begin()->first + S.begin()->second;
        P[i].amt = S.begin()->first - S.begin()->second;
        S.erase(S.begin());
    }
    sort(P.begin(), P.end(), [] (point u, point v)
    {
        if(u.apt != v.apt) return u.apt < v.apt;
        else return u.amt > v.amt;
    });
    for(int i = 0; i < Z; i++) P[i].i = i+1;
    int ans = 0;
    vi BIT(1+Z, 0);
    sort(P.begin(), P.end(), [] (point u, point v)
    {
        if(u.amt == v.amt) return u.apt > v.apt;
        return u.amt < v.amt;
    });
    for(point p: P)
    {
        int h = 1;
        for(int j = p.i-1; j >= 1; j -= j&-j)
            h = max(h, BIT[j]+1);
        ans = max(ans, h);
        for(int j = p.i; j <= Z; j += j&-j)
            BIT[j] = max(BIT[j], h);
    }
    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... |