Submission #1326321

#TimeUsernameProblemLanguageResultExecution timeMemory
1326321rayxuGlobal Warming (CEOI18_glo)C++20
27 / 100
157 ms19356 KiB
#include <bits/stdc++.h> #define int long long using namespace std; class SegTree { private: int sz; vector<int> tree; public: SegTree(int len):sz(len),tree(4*len,0){} void update(int ind,int val) { ind+=sz; tree[ind] = max(tree[ind],val); while (ind>1) { ind>>=1; tree[ind] = max(tree[ind*2],tree[ind*2+1]); } } int query(int l,int r) { l+=sz; r+=sz; int res=0; while (l<=r) { if (l&1) res = max(res,tree[l++]); if (!(r&1)) res = max(res,tree[r--]); l>>=1; r>>=1; } return res; } } ; signed main() { ios_base::sync_with_stdio(false); cin.tie(0); //freopen("warm.in","r",stdin); int n,x; cin>>n>>x; vector<pair<int,int>> a(n); vector<int> all; for (auto &i:a) { cin>>i.first; i.second = i.first+x; all.push_back(i.first); all.push_back(i.first+x); } sort(begin(all),end(all)); for (auto &i:a) { i.first = lower_bound(begin(all),end(all),i.first)-begin(all)+1; i.second = lower_bound(begin(all),end(all),i.second)-begin(all)+1; } SegTree segtree(2*n+2); //for (auto i:a) cout<<i.first<<" "<<i.second<<endl; for (int i=0;i<n;i++) { int mx=segtree.query(0,a[i].second-1); segtree.update(a[i].second,mx+1); mx = segtree.query(0,a[i].first-1); segtree.update(a[i].first,mx+1); } cout<<segtree.query(1,2*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...