Submission #232213

#TimeUsernameProblemLanguageResultExecution timeMemory
232213nicolaalexandraGlobal Warming (CEOI18_glo)C++14
62 / 100
154 ms3064 KiB
#include <bits/stdc++.h> #define DIM 200010 using namespace std; int v[DIM],d[DIM]; pair <int,int> 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]; d[1] = n, k = 1; dp_right[n] = make_pair(v[n],1); for (i=n-1;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] = make_pair(v[d[k]],k); } /// 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 = dp_right[i+1].first + 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].second + 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...