Submission #720866

#TimeUsernameProblemLanguageResultExecution timeMemory
720866WonderfulWhaleGlobal Warming (CEOI18_glo)C++17
100 / 100
355 ms15356 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define st first #define nd second #define pii pair<int, int> #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() struct SegTree { const static int T = 1<<18; int t[2*T]; void update(int x, int val) { x+=T; t[x] = max(t[x], val); x/=2; while(x) { t[x] = max(t[2*x], t[2*x+1]); x/=2; } } int query(int l, int r) { l+=T; r+=T; int ret = max(t[l], t[r]); while(l/2!=r/2) { if(l%2==0) ret = max(ret, t[l+1]); if(r%2==1) ret = max(ret, t[r-1]); l/=2; r/=2; } return ret; } } seg1, seg2; map<int, int> M; int tab[200009]; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, d; cin >> n >> d; vector<int> v; for(int i=0;i<n;i++) { cin >> tab[i]; v.pb(tab[i]); } sort(all(v)); v.erase(unique(all(v)), v.end()); for(int i=0;i<sz(v);i++) { M[v[i]] = i; } for(int i=0;i<n;i++) { int pos = M[tab[i]]; auto it1 = M.upper_bound(tab[i]-1); auto it2 = M.upper_bound(tab[i]+d-1); if(it2!=M.begin()) { it2--; seg2.update(pos, 1+seg1.query(0, it2->nd)); } else { seg2.update(pos, 1); } if(it1!=M.begin()) { it1--; seg2.update(pos, 1+seg2.query(0, it1->nd)); seg1.update(pos, 1+seg1.query(0, it1->nd)); } else { seg2.update(pos, 1); seg1.update(pos, 1); } } cout << seg2.query(0, n) << "\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...