Pagini recente » Diferente pentru utilizator/bt.pantea intre reviziile 10 si 9 | Diferente pentru utilizator/yato2 intre reviziile 25 si 24 | Diferente pentru blog/la-inceputul-sezonului-competitional intre reviziile 4 si 3 | Istoria paginii utilizator/gvbk | Cod sursa (job #299968)
Cod sursa(job #299968)
#include<stdio.h>
struct Dq{
long long p,c;
int cp;
};
Dq deque[100000];
Dq aux;
int st,end;
int n,t,s,ft,cop;
long long sum;
void add(Dq a);
int main()
{
freopen("branza.in","r",stdin);
freopen("branza.out","w",stdout);
scanf("%d%d%d",&n,&s,&t);
st=1;
for(int i=1;i<=n;++i)
{
scanf("%d%d",&aux.c,&aux.p);
if(i - deque[st].p >= t)
++st;
cop=aux.p;
aux.p=i;
add(aux);
sum += (deque[st].c + (i-deque[st].p)*s) * cop;
}
printf("%lld",sum);
return 0;
}
void add(Dq a)
{
/*
i=st;
if(ft)
{
while(a.c>deque[i].c+s&&deque[i].c)
{
deque[i].p++;
deque[i].c+=s;
deque[i].cp=cop;
++i;
}
}
ft=1;
deque[i].p=aux.p;
deque[i].c=aux.c;
deque[i].cp=cop;
end=i;
*/
while(end && deque[end].c + s*(a.p - deque[end].p) >= a.c)
--end;
deque[++end] = a;
}