이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,k,T;cin>>n>>k>>T;
int arr[n];
for(int i = 0;i<n;i++)cin>>arr[i];
int la = 0;
int pref[n] = {0};
for(int i = 0;i<n;i++){
if(i==0){
la = arr[i];
pref[i] = (arr[i]<=T);
}else{
if(la+1<=arr[i]){
pref[i] = (la+1<=T);
la++;
}else{
la = arr[i];
pref[i] = (arr[i]<=T);
}
pref[i] += pref[i-1];
}
}
stack<pair<pair<int,int>,int>> suf;int suff[n+1] = {0};
long long an = 0;
for(int i = n-1;i>=0;i--){
long long val = arr[i]-i;
an+=(arr[i]<=T);
int st = i+1;
while(!suf.empty()&&suf.top().first.first>=val){
int xd = suf.top().first.second;
int len1 = 0;
if(xd<T){
len1 = min(suf.top().second,(T-xd+1));
}
int len2 = 0;
xd = arr[i];
if(xd+(st-i)<T){
len2 = min(suf.top().second,(T-(xd+(st-i))+1));
}
an+=len2-len1;
st+=suf.top().second;
suf.pop();
}
suf.push({{arr[i],val},st-i});
suff[i] = an;
}
int all = 1e9;
for(int i = 0;i<n;i++){
all = min(all,pref[i]+suff[i+1]);
}
cout<<all<<endl;
}
| # | 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... |