제출 #960418

#제출 시각아이디문제언어결과실행 시간메모리
960418vjudge1Global Warming (CEOI18_glo)C++14
100 / 100
105 ms8780 KiB
#include<bits/stdc++.h>

using namespace std;

#define int long long

struct FenwickTree{
   int n;
   vector<int> t;
   void init(int _n){
      n=_n;
      t.assign(n+1, 0);
   }
   void update(int pos, int val){
      for (int i=pos; i<=n; i+=i&(-i)) t[i]=max(t[i], val);
   }
   int get(int pos){
      int ans=0;
      for (int i=pos; i; i-=i&(-i)) ans=max(ans, t[i]);
      return ans;
   }
} bit[2];

const int N=2e5+10;
int n, x, a[N];

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   cin >> n >> x;
   for (int i=1; i<=n; ++i) cin >> a[i];
   vector<int> vals{-1};
   for (int i=1; i<=n; ++i) vals.push_back(a[i]);
   sort(vals.begin(), vals.end());
   vals.resize(unique(vals.begin(), vals.end())-vals.begin());
   bit[0].init((int)vals.size()-1);
   bit[1].init((int)vals.size()-1);
   for (int i=1; i<=n; ++i){
      int pi=lower_bound(vals.begin(), vals.end(), a[i])-vals.begin();
      int pid=lower_bound(vals.begin(), vals.end(), a[i]+x)-vals.begin();
      int f0=bit[0].get(pi-1)+1;
      int f1=max(bit[1].get(pi-1)+1, bit[0].get(pid-1)+1);
      bit[0].update(pi, f0);
      bit[1].update(pi, f1);
   }
   cout << max(bit[0].get((int)vals.size()-1), bit[1].get((int)vals.size()-1)) << '\n';
   return 0;
}
#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...