Submission #232214

#TimeUsernameProblemLanguageResultExecution timeMemory
232214nicolaalexandraGlobal Warming (CEOI18_glo)C++14
100 / 100
163 ms4216 KiB
#include <bits/stdc++.h> #define DIM 200010 using namespace std; int v[DIM],d[DIM],dp_left[DIM],dp_right[DIM]; int n,i,x,k,sol; int main (){ //ifstream cin ("date.in"); //ofstream cout ("date.out"); cin>>n>>x; for (i=1;i<=n;i++) cin>>v[i]; for (i=n;i;i--){ int st = 1, dr = k; while (st <= dr){ int mid = (st+dr)>>1; if (v[d[mid]] > v[i]) st = mid+1; else dr = mid-1; } if (st == k+1) k++; d[st] = i; dp_right[i] = st; } /// modific un sufix k = 0; for (i=1;i<=n;i++){ int st = 1, dr = k; while (st <= dr){ int mid = (st+dr)>>1; if (v[d[mid]] < v[i]) st = mid+1; else dr = mid-1; } if (st == k+1) k++; d[st] = i; if (i < n){ int val = v[i+1] + x; /// vreau sa gasesc cea mai mare valoare mai mica decat asta int st = 1, dr = k, poz = 0; while (st <= dr){ int mid = (st+dr)>>1; if (v[d[mid]] < val){ poz = mid; st = mid+1; } else dr = mid-1; } sol = max (sol,dp_right[i+1] + poz); } } sol = max (sol,k); cout<<sol; 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...