您的位置:首页 > 其它

POJ 2786 Keep the Customer Satisfied 优先队列

2014-01-08 23:01 357 查看
----------

const int maxn=900000;
const int maxm=10000;
int n;

struct Dat{
    int v,lim;
    const bool operator<(const Dat& rhs) const{
        return v<rhs.v;
    }
}a[maxn];
bool cmp(Dat a,Dat b){
    return a.lim<b.lim;
}
priority_queue<Dat>que;

int main(){
    while (~scanf("%d",&n)){
        for (int i=0;i<n;i++) scanf("%d%d",&a[i].v,&a[i].lim);
        sort(a,a+n,cmp);
        int sum=0;
        int ans=0;
        while (!que.empty()) que.pop();
        for (int i=0;i<n;i++){
            que.push(a[i]);
            sum+=a[i].v;
            while (sum>a[i].lim){
                Dat top=que.top();
                que.pop();
                sum-=top.v;
                ans++;
            }
        }
        printf("%d\n",n-ans);
    }
	return 0;
}


----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: