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 int long long
const int INF = 1e18;
int n,d,lim;
int t[2000005];
bool blocat[2000005];
int tole[2000005];
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>d>>lim;
for(int i=1;i<=n;i++)
{
cin>>t[i];
tole[i] = n+1;
for(int j=i;j>0;j--)
{
if(t[j] + (i-j) <= lim)
{
tole[i] = j;
break;
}
}
}
for(int pas=1;pas<=d;pas++)
{
int mxm=0,unde=-1;
for(int i=1;i<=n;i++)
{
int cnt=0;
for(int j=i+1;j<=n;j++)
if(tole[j]<=i)
cnt++;
if(cnt>mxm)
{
mxm = cnt;
unde = i;
}
}
if(unde==-1)
break;
blocat[unde]=1;
for(int i=unde+1;i<=n;i++)
{
if(tole[i]<=unde)
{
tole[i] = n+1;
}
}
}
int rez=0;
int mnm=INF;
for(int i=1;i<=n;i++)
{
if(blocat[i-1])
mnm=INF;
mnm = min(mnm, t[i]-i);
if(mnm <= lim-i)
rez++;
/*for(int j=i;j>0;j--)
{
if(t[j] - j <= lim - i)
{
rez++;
break;
}
if(blocat[j-1])
break;
}*/
}
cout<<rez;
return 0;
}
/*
pentru fiecare pozitie i ne intereseaza doar cea mai din dreapta pozitie j aflata in stanga ei care respecta
j <= i
t[j] + (i-j) <= lim
t[j] - j <= lim - i
*/
# | 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... |