#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
#define pii pair<int,int>
#define f first
#define s second
int main() {
int n,d,t; cin >> n >> d >> t;
int p[n+1]; int prev = n+1;
for(int i=1;i<=n;i++) cin >> p[i];
for(int i=1;i<n;i++) {
if(p[i]<=t && p[i+1]<=t) p[i+1] = min(p[i+1],p[i]+1);
}
priority_queue<pii,vector<pii>> pq;
//find pos to put mattress
for(int i=n;i>1;i--) {
if(p[i]>t && t>p[i-1]) {
pq.push({min(prev-i,t-p[i-1]),i-1});
prev=i;
}
}
//take D topmost
int pos[d];
for(int i=0;i<d;i++) {
pos[i] = pq.top().s;
pq.pop();
}
sort(pos,pos+d);
//for(int k:pos) cout << k<< ' ';
for(int i=0;i<d-1;i++) {
int l=pos[i]+1, r=pos[i+1]-1;
for(int j=l;j<r;j++){
if(p[j]<t && t<p[j+1]) p[j+1] = p[j]+1;
}
}
int ans = 0;
for(int i=1;i<=n;i++) if(p[i]<=t) ans++;
cout << ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |