#include <cstdio>
#include <algorithm>
#define MAKS 1000010
using namespace std;
typedef long long int lld;
struct polana
{
lld a;
lld b;
};
polana wej[MAKS];
lld wyn[MAKS];
int kol[MAKS];
bool cmp(const polana& i, const polana& j)
{
if(i.a!=j.a)return i.a < j.a;
return i.b < j.b;
}
lld f[2][MAKS];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%lld %lld",&(wej[i].a),&(wej[i].b));
sort(wej,wej+n,cmp);
for(int i=0;i<n;i++)
{
f[0][i]=wej[i].b;
if(f[0][i]>wyn[1])wyn[1]=f[0][i];
}
int akt=1;
for(int k=2;k<=n;k++)
{
lld maks=-1;
for(int i=0;i<n;i++)
{
if(maks!=-1)f[akt][i]=wej[i].b + lld(k-1)*wej[i].a + maks;
else f[akt][i]=-1;
if(f[akt][i]>wyn[k])wyn[k]=f[akt][i];
if(f[1-akt][i]>maks)maks=f[1-akt][i];
}
akt=1-akt;
}
for(int i=1;i<=n;i++)printf("%lld\n",wyn[i]);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <cstdio> #include <algorithm> #define MAKS 1000010 using namespace std; typedef long long int lld; struct polana { lld a; lld b; }; polana wej[MAKS]; lld wyn[MAKS]; int kol[MAKS]; bool cmp(const polana& i, const polana& j) { if(i.a!=j.a)return i.a < j.a; return i.b < j.b; } lld f[2][MAKS]; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++)scanf("%lld %lld",&(wej[i].a),&(wej[i].b)); sort(wej,wej+n,cmp); for(int i=0;i<n;i++) { f[0][i]=wej[i].b; if(f[0][i]>wyn[1])wyn[1]=f[0][i]; } int akt=1; for(int k=2;k<=n;k++) { lld maks=-1; for(int i=0;i<n;i++) { if(maks!=-1)f[akt][i]=wej[i].b + lld(k-1)*wej[i].a + maks; else f[akt][i]=-1; if(f[akt][i]>wyn[k])wyn[k]=f[akt][i]; if(f[1-akt][i]>maks)maks=f[1-akt][i]; } akt=1-akt; } for(int i=1;i<=n;i++)printf("%lld\n",wyn[i]); } |
English