#include <bits/stdc++.h>
#define int long long
#define mp(a, b) make_pair(a, b)
#define nd second
#define st first
using namespace std;
//multiset<pair<int, int> > pozostale;// pary[1000007];
//multiset<pair<int, int> > dp;
vector<pair<int, int>> dp;
vector<pair<int, int>> pozostale;// tbl[1000008];
int pref[1000009];
#undef int
int main()
{
#define int long long
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, a, b;
cin>>n;
for (int i=0; i<n; i++)
{
cin>>a>>b;
pozostale.push_back(mp(a, b));
}
sort(pozostale.begin(), pozostale.end());
for (int i=0; i<n; i++)
{
pref[dp.size()]=0;
for (int j=((int)dp.size())-1; j>=0; j--)
{
pref[j]=dp[j].st+pref[j+1];
}
int maks=0, maxpoz=0, co=0, wynik=0;
int q=0;
for (int j=0; j<pozostale.size(); j++)
{
//int q=upper_bound(dp.begin(), dp.end(), pozostale[j])-dp.begin();
while(q<dp.size()) if (dp[q].st<=pozostale[j].st) q++; else break;
if (maks<pref[q]+pozostale[j].nd+pozostale[j].st*q)
{
maks=pref[q]+pozostale[j].nd+pozostale[j].st*q;
maxpoz=q;
co=j;
}
}
dp.insert(dp.begin()+maxpoz, pozostale[co]);
pozostale.erase(pozostale.begin()+co);
for (int j=0; j<dp.size(); j++)
{
wynik+=dp[j].st*j+dp[j].nd;
}
cout<<wynik<<"\n";
}
return 0;
}
/*int maks=0, maks1=0;
int q=0;
for (int i=0; i<pozostale.size(); i++)
{
if (maks<pozostale[i].nd)
{
maks=pozostale[i].nd;
maks1=pozostale[i].st;
q=i;
}
else if(maks==pozostale[i].nd && maks1<pozostale[i].st)
{
maks=pozostale[i].nd;
maks1=pozostale[i].st;
q=i;
}
}
auto pom=pozostale[q];
//auto kuc=q;
pom.nd-=pom.st*i;
dp.insert(pom);
pozostale.erase(pozostale.begin()+q);
int num=0, wynik=0;
for (auto it=dp.begin(); it!=dp.end(); it++)
{
wynik+=(*it).nd+(*it).st*num;
num++;
}
cout<<wynik<<"\n";
for (int i=0; i<pozostale.size(); i++)
{
pozostale[i].nd+=pozostale[i].st;
}
/*for (int i=0; i<n2; i++)
{
tbl[i].nd+=tbl[i].st;
}
/*for (auto it=pozostale.begin(); it!=pozostale.end();)
{
pom=*it;
kuc=it;
it++;
pozostale.erase(kuc);
pozostale.insert(mp(pom.st, pom.st+pom.nd));
}
for (auto it : dp)
{
cout<<it.st<<" "<<it.nd<<", ";
}
cout<<"\n";
for (auto it : pozostale)
{
cout<<it.st<<" "<<it.nd<<", ";
}
cout<<"\n";
//*/
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #include <bits/stdc++.h> #define int long long #define mp(a, b) make_pair(a, b) #define nd second #define st first using namespace std; //multiset<pair<int, int> > pozostale;// pary[1000007]; //multiset<pair<int, int> > dp; vector<pair<int, int>> dp; vector<pair<int, int>> pozostale;// tbl[1000008]; int pref[1000009]; #undef int int main() { #define int long long ios_base::sync_with_stdio(0); cin.tie(0); int n, a, b; cin>>n; for (int i=0; i<n; i++) { cin>>a>>b; pozostale.push_back(mp(a, b)); } sort(pozostale.begin(), pozostale.end()); for (int i=0; i<n; i++) { pref[dp.size()]=0; for (int j=((int)dp.size())-1; j>=0; j--) { pref[j]=dp[j].st+pref[j+1]; } int maks=0, maxpoz=0, co=0, wynik=0; int q=0; for (int j=0; j<pozostale.size(); j++) { //int q=upper_bound(dp.begin(), dp.end(), pozostale[j])-dp.begin(); while(q<dp.size()) if (dp[q].st<=pozostale[j].st) q++; else break; if (maks<pref[q]+pozostale[j].nd+pozostale[j].st*q) { maks=pref[q]+pozostale[j].nd+pozostale[j].st*q; maxpoz=q; co=j; } } dp.insert(dp.begin()+maxpoz, pozostale[co]); pozostale.erase(pozostale.begin()+co); for (int j=0; j<dp.size(); j++) { wynik+=dp[j].st*j+dp[j].nd; } cout<<wynik<<"\n"; } return 0; } /*int maks=0, maks1=0; int q=0; for (int i=0; i<pozostale.size(); i++) { if (maks<pozostale[i].nd) { maks=pozostale[i].nd; maks1=pozostale[i].st; q=i; } else if(maks==pozostale[i].nd && maks1<pozostale[i].st) { maks=pozostale[i].nd; maks1=pozostale[i].st; q=i; } } auto pom=pozostale[q]; //auto kuc=q; pom.nd-=pom.st*i; dp.insert(pom); pozostale.erase(pozostale.begin()+q); int num=0, wynik=0; for (auto it=dp.begin(); it!=dp.end(); it++) { wynik+=(*it).nd+(*it).st*num; num++; } cout<<wynik<<"\n"; for (int i=0; i<pozostale.size(); i++) { pozostale[i].nd+=pozostale[i].st; } /*for (int i=0; i<n2; i++) { tbl[i].nd+=tbl[i].st; } /*for (auto it=pozostale.begin(); it!=pozostale.end();) { pom=*it; kuc=it; it++; pozostale.erase(kuc); pozostale.insert(mp(pom.st, pom.st+pom.nd)); } for (auto it : dp) { cout<<it.st<<" "<<it.nd<<", "; } cout<<"\n"; for (auto it : pozostale) { cout<<it.st<<" "<<it.nd<<", "; } cout<<"\n"; //*/ |
English