| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 847306 | Ahmed57 | The short shank; Redemption (BOI21_prison) | C++17 | 1 ms | 348 KiB |
이 제출은 이전 버전의 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]){
la++;
pref[i] = (la<=T);
}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+=max(0,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... | ||||
