Submission #465051

#TimeUsernameProblemLanguageResultExecution timeMemory
465051deinfreundGlobal Warming (CEOI18_glo)C++14
100 / 100
314 ms15524 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
  int n, num, d;
  cin >> n >> d;
  map<int, int> blub, fred;
  blub[-d] = fred[-d] = 0;
  for (int i = 0; i < n; i++) {
    cin >> num;
    fred[num] = max(prev(blub.lower_bound(num + d))->second + 1, prev(fred.lower_bound(num))->second + 1);
    {
      auto it = fred.find(num);
      int val = it->second;
      auto nextit = next(it);
      while(nextit != fred.end() && nextit->second < val) {
	fred.erase(nextit);
	nextit = next(fred.find(num));
      }
    }
    { 
      blub[num] = prev(blub.lower_bound(num))->second + 1;
      auto it = blub.find(num);
      int val = it->second;
      auto nextit = next(it);
      while(nextit != blub.end() && nextit->second < val) {
	blub.erase(nextit);
	nextit = next(blub.find(num));
      }
    }
    //cerr << fred.rbegin()->second << ", " <<blub.rbegin()->second << "\n";
  }
  cout << max(fred.rbegin()->second, blub.rbegin()->second) << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...