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 >> A[i];
}
for(int i = 0; i < M; i++)
{
cin >> T[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... |