이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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];
pair<int,int> aint[4200000];
int lazy[4200000];
void build(int nod, int st, int dr)
{
if(st==dr)
{
aint[nod] = {0,st};
return;
}
int mij=(st+dr)/2;
build(nod*2,st,mij);
build(nod*2+1,mij+1,dr);
aint[nod] = max(aint[nod*2], aint[nod*2+1]);
}
void propagate(int nod)
{
lazy[nod*2] += lazy[nod];
lazy[nod*2+1] += lazy[nod];
aint[nod*2].first += lazy[nod];
aint[nod*2+1].first += lazy[nod];
lazy[nod]=0;
}
void upd(int nod, int st, int dr, int le, int ri, int newv)
{
if(le>ri)
return;
if(le==st && dr==ri)
{
aint[nod].first += newv;
lazy[nod] += newv;
return;
}
propagate(nod);
int mij=(st+dr)/2;
upd(nod*2,st,mij,le,min(mij,ri),newv);
upd(nod*2+1,mij+1,dr,max(mij+1,le),ri,newv);
aint[nod] = max(aint[nod*2], aint[nod*2+1]);
}
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>d>>lim;
build(1,1,n);
deque<int> dq;
for(int i=1;i<=n;i++)
{
cin>>t[i];
while(!dq.empty() && t[i] - i <= t[dq.back()] - dq.back())
dq.pop_back();
dq.push_back(i);
while(!dq.empty() && t[dq.back()] - dq.back() > lim - i)
dq.pop_back();
if(dq.empty())
tole[i] = n+1;
else
tole[i] = dq.back();
upd(1,1,n,tole[i],i,+1);
}
for(int pas=1;pas<=d;pas++)
{
if(aint[1].first==0)
break;
int unde = aint[1].second;
blocat[unde]=1;
for(int i=unde+1;i<=n;i++)
{
if(tole[i]<=unde)
{
upd(1,1,n,tole[i],i,-1);
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++;
}
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... |