
Untitled
By: a guest on
Apr 17th, 2012 | syntax:
None | size: 0.81 KB | hits: 18 | expires: Never
#include<iostream>
#include<algorithm>
#include<fstream>
#include<queue>
using namespace std;
ifstream f1("install.in");
ofstream f2("install.out");
int N,i,T[100001],n;
int W[100001];
struct Per{int t,n,ind;};
bool operator<(Per a,Per b)
{if(a.n>1 && b.n>1){return a.n*a.t<b.n*b.t;};
if(a.n>1)return true;
if(b.n>1)return false;}
priority_queue<Per> Q;
Per P;
main()
{f1>>N;
for(i=0;i<N;i++)f1>>T[i];
sort(T,T+N);
P.n=N;
P.t=T[0];
P.ind=0;
f2<<T[0]*N<<endl;
W[0]=N;
n=N;
for(i=1;i<N;i++){
P.n=W[i-1];
W[i]=W[i-1];
P.t=T[i];
P.ind=i;
n+=W[i-1];
Q.push(P);
while(n>N){
P=Q.top();
Q.pop();
W[P.ind]--;
P.n--;
n--;
Q.push(P);}
P=Q.top();
f2<<max(P.t*P.n,T[i])<<endl;
}
}