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 <bits/stdc++.h>
using namespace std;
#define num long long
// LIS maintainer
struct LISm {
map<num, num> d;
void insert (num id, num res) {
if (query(id) >= res) return ;
if (d.find(id) != d.end())
d.erase(id);
d.insert({ id, res });
auto it = d.find(id);
while (true) {
it ++;
if (it == d.end()) break ;
if ((*it).second > res) break ;
d.erase((*it).first);
it = d.find(id);
}
}
// returns the second value of the last iterator such that key < x
num query (num x) {
if (d.empty()) return 0;
auto it = d.lower_bound(x); // first iterator such that key >= x
if (it == d.begin()) return 0;
it --; // last iterator such that key < x
return (*it).second;
}
void show () {
for (auto u : d)
printf("%lld->%lld ", u.first, u.second);
printf("\n");
}
};
int main () {
LISm lis_0;
LISm lis_x;
int nbTemp; num maxDelta;
cin >> nbTemp >> maxDelta;
num result = 0;
for (int idTemp = 0; idTemp < nbTemp; idTemp ++) {
num temp;
cin >> temp;
num temp_x = temp + maxDelta;
num lis_0_value = 1 + lis_0.query(temp);
num lis_x_value = 1 + max( lis_0.query(temp_x), lis_x.query(temp_x) );
//printf("\n--- %d %lld ---\n", idTemp, temp);
//printf("%d: 0(%lld) +x(%lld)\n", idTemp, lis_0_value, lis_x_value);
lis_0.insert( temp, lis_0_value );
//lis_0.show();
lis_x.insert( temp_x, lis_x_value );
//lis_x.show();
result = max(result, lis_0_value);
result = max(result, lis_x_value);
}
cout << result;
}
# | 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... |