Submission #1179993

#TimeUsernameProblemLanguageResultExecution timeMemory
1179993PieArmyGlobal Warming (CEOI18_glo)C++20
100 / 100
482 ms34080 KiB
#include<bits/stdc++.h> typedef long long ll; #define pb push_back #define fr first #define sc second using namespace std; struct Seg{ int n; vector<int>tree; void init(int N){ n=N; tree.resize(n<<2,0); } int l,r; void up(int node=1,int left=0,int right=-1){ if(right==-1)right=n-1; if(left==right){ tree[node]=max(tree[node],r); return; } const int mid=(left+right)>>1; if(l>mid)up(node*2+1,mid+1,right); else up(node*2,left,mid); tree[node]=max(tree[node*2],tree[node*2+1]); } void update(int tar,int val){ l=tar;r=val; up(); } int qu(int node=1,int left=0,int right=-1){ if(right==-1)right=n-1; if(left>=l&&right<=r)return tree[node]; if(left>r||right<l)return 0; const int mid=(left+right)>>1; return max(qu(node*2,left,mid),qu(node*2+1,mid+1,right)); } int query(int left,int right){ l=left;r=right; if(r<0)return 0; return qu(); } }; int n,k; int arr[200023]; Seg seg1,seg2; int m; map<int,int>mp; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin>>n>>k; vector<int>v; for(int i=1;i<=n;i++){ cin>>arr[i]; v.pb(arr[i]); v.pb(arr[i]+k); } sort(v.begin(),v.end()); for(int x:v){ if(mp[x]==0){ mp[x]=++m; } } seg1.init(m+1); seg2.init(m+1); for(int i=1;i<=n;i++){ seg2.update(mp[arr[i]],max(seg2.query(0,mp[arr[i]]-1),seg1.query(0,mp[arr[i]+k]-1))+1); seg1.update(mp[arr[i]],seg1.query(0,mp[arr[i]]-1)+1); } cout<<seg2.query(0,m); }
#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...