#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]); } |