Cod sursa(job #67807)
Utilizator | Data | 25 iunie 2007 17:22:47 | |
---|---|---|---|
Problema | Branza | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.5 kb |
#include <stdio.h>
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define nmax 100111
long long n,S,T,Q,sf,cod[nmax],v[nmax];
long long sol;
int main()
{
long long i,a,b;
freopen("branza.in","r",stdin);
freopen("branza.out","w",stdout);
scanf("%lld %lld %lld",&n,&S,&T);
Q=0,sf=-1;
FOR(i,0,n)
{
scanf("%lld %lld",&a,&b);
for(;Q<=sf&&(i-cod[sf])*S+v[sf]>=a;--sf);
cod[++sf]=i;
v[sf]=a;
if(i-cod[Q]>T)
Q++;
sol+=(v[Q]+(i-cod[Q])*S)*b;
}
printf("%lld\n",sol);
return 0;
}