This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define sz(x) ((int) x.size())
#define show(x) cerr << #x << " is " << x << endl;
#define show2(x, y) cerr << #x << " is " << x << ", " << #y << " is " << y << endl;
#define show3(x, y, z) cerr << #x << " is " << x << ", " << #y << " is " << y << ", " << #z << " is " << z << endl;
#define l first
#define r second
typedef long long lint;
typedef pair<lint, lint> ii;
lint arr[2000005];
int p[2000005];
int vis[2000005];
int cnt = 0;
int get(int u){
if(vis[u] or u == 0) return 0;
return get(p[u])+1;
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0);
lint n, S, T; cin >> n >> S >> T;
for(int i = 1;i <= n;i++) cin >> arr[i];
lint ans = n;
vector<ii> useful;
vector<ii> ranges;
for(int i = 1;i <= n;i++){
if(arr[i] <= T){
int reach = min(n, i+T-arr[i]);
//show2(i, reach);
while(not useful.empty()){
if(useful.back().first <= reach) useful.pop_back();
else break;
}
useful.push_back(ii(reach,i));
}
else{
auto it = lower_bound(all(useful), ii(i, -1), greater<ii>());
if(it != useful.begin()){
it--;
//show2(i, it->second);
ranges.push_back(ii(it->second,i));
}
else{
//show2("F", i);
ans--;
}
}
}
sort(all(ranges), [&](ii a, ii b){
if(a.l == b.l) return a.r > b.r;
else return a.l < b.l;
});
stack<ii> ST;
for(ii R : ranges){
//show2(R.first, R.second);
while(not ST.empty()){
if(ST.top().first <= R.first) ST.pop();
else break;
}
cnt++;
if(not ST.empty()) p[cnt] = ST.top().second;
ST.push(ii(R.r, cnt));
}
while(S--){
int best = 0;
int bestu = 1;
for(int i = 1;i <= cnt;i++){
int cur = get(i);
if(cur > best){
bestu = i;
best = cur;
}
}
//show2(best, bestu);
ans -= best;
while(bestu != 0){
vis[bestu] = 1;
bestu = p[bestu];
}
}
cout << ans;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |