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 <algorithm>
#include <set>
struct Seq
{
Seq(int v, int s) : maxVal(v), size(s) {}
int maxVal, size;
bool operator <(const Seq &other) const
{
return (maxVal < other.maxVal);
}
};
const int MAXN = 2e5;
int temp[MAXN];
int lis[MAXN], lds[MAXN];
std::set<Seq> stacket;
void insert(Seq sequence)
{
while (stacket.lower_bound(sequence) != stacket.end() && stacket.lower_bound(sequence)->size <= sequence.size)
stacket.erase(stacket.lower_bound(sequence));
std::set<Seq>::iterator prev = stacket.upper_bound(sequence);
prev--;
if (prev->size < sequence.size)
stacket.emplace(sequence);
}
int main()
{
std::ios::sync_with_stdio(false);
std::cout.tie(nullptr);
std::cin.tie(nullptr);
int days, maxOffset;
std::cin >> days >> maxOffset;
for (int iDay = 0; iDay < days; iDay++)
std::cin >> temp[iDay];
stacket.emplace(0, 0);
for (int iDay = 0; iDay < days; iDay++)
{
std::set<Seq>::iterator prev = stacket.lower_bound(Seq(temp[iDay], 1));
prev--;
lis[iDay] = prev->size + 1;
insert(Seq(temp[iDay], lis[iDay]));
}
stacket.clear();
stacket.emplace(-2e9, 0);
for (int iDay = days - 1; iDay > -1; iDay--)
{
std::set<Seq>::iterator prev = stacket.lower_bound(Seq(-temp[iDay], 1));
prev--;
lds[iDay] = prev->size + 1;
insert(Seq(-temp[iDay], lds[iDay]));
}
stacket.clear();
int maxLength = 1;
stacket.emplace(0, 0);
for (int iDay = 0; iDay < days; iDay++)
{
std::set<Seq>::iterator prev = stacket.lower_bound(Seq(temp[iDay] + maxOffset, 1));
prev--;
maxLength = std::max(maxLength, prev->size + lds[iDay]);
insert(Seq(temp[iDay], lis[iDay]));
}
std::cout << maxLength << '\n';
return 0;
}
# | 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... |