이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
typedef std::pair<int,int> pii;
int main()
{
int N,T,K;
std::cin>>N>>K>>T;
int array[N];for(auto&x:array)std::cin>>x;
///Tarefa: Achar para cada cara o PRIMEIRO x valido
int dp[N]={};
///Quero minimizar o custo
std::deque<pii> stack;
for(int i=0;i!=N;++i){
int custo = array[i]-i;
while(stack.size()&&stack.front().first>custo){
stack.pop_front();
}
stack.push_front({custo,i});
///O valor tem que ser menor ou igual ao desejo
int desejo = T-i;
int l=0,r=stack.size()-1;
while(l<r){
int m = (l+r)/2;
if(stack[m].first<=desejo){
r=m;
}else l=m+1;
}
if(stack[l].first<=desejo){
// printf("Liga %d %d\n",i,stack[l].second);
++dp[stack[l].second];
}
}
std::vector<int> vec;
for(int i=0;i!=N;++i)vec.push_back(dp[i]);
std::sort(vec.begin(),vec.end(),std::greater<int>());
int sum=0;
for(int i=0;i!=K;++i)sum+=std::max(0,vec[i]-1);
std::cout<<(N-sum)<<"\n";
}
# | 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... |