Submission #960418

#TimeUsernameProblemLanguageResultExecution timeMemory
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...