【题目】D. Too Easy Problems

【题意】给定n个问题和总时限T,每个问题给定时间ti和限制ai,当解决的问题数k<=ai时问题有效,求在时限T内选择一些问题解决的最大有效问题数。n<=2*10^5,T<=10^9。

【算法】贪心(排序+堆)

【题解】因为T太大,不能考虑背包。

容易发现k越小越能使更多问题有效,所以一定有最优方案的所有问题均有效。

当k唯一确定时,其实就是在所有ai>=k的问题中选取时间最少的几个解决。

当k减小时,选择的范围扩大,就可以选择一些时间更少的替换掉已选问题中时间最长的,这显然可以用堆维护。

所以得到做法——按k从大到小排序,然后依次扫描,维护一个时间大顶堆,每次:

1.若当前k>size(堆大小),弹出堆顶至size=k。

2.若堆中可以直接加入当前问题(k<size和满足时限),则直接加入。

3.否则考虑是否可以替换堆顶,可以则替换。

每次统计答案,找到最大值。

观察三个操作,容易发现当出现k>size的情况后,答案不可能再变大,也就是答案是一个凸函数,顶点出现在k>size时。

所以只需要再k>size输出当前堆中元素即是答案。

复杂度O(n log n)。

#include<cstdio>
#include<cctype>
#include<queue>
#include<algorithm>
using namespace std;
int read(){
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
const int inf=0x3f3f3f3f,maxn=;
int n;
struct cyc{
int k,t,id;
}a[maxn];
struct node{
int id,t;
bool operator < (const node &a)const{
return t<a.t;
}
};
priority_queue<node>Q;
bool cmp(cyc a,cyc b){return a.k>b.k;}
int T;
int main(){
n=read();T=read();
for(int i=;i<=n;i++)a[i].k=read(),a[i].t=read(),a[i].id=i;
sort(a+,a+n+,cmp);
int size=,time=;
for(int i=;i<=n;i++){
if(size>a[i].k){printf("%d\n%d\n",size,size);while(!Q.empty())printf("%d ",Q.top().id),Q.pop();return ;}
if(size<a[i].k&&time+a[i].t<=T)Q.push((node){a[i].id,a[i].t}),size++,time+=a[i].t;
else if(!Q.empty()&&a[i].t<Q.top().t){time-=Q.top().t;Q.pop();Q.push((node){a[i].id,a[i].t});time+=a[i].t;}
}
printf("%d\n%d\n",size,size);while(!Q.empty())printf("%d ",Q.top().id),Q.pop();return ;
}

【CodeForces】913 D. Too Easy Problems的更多相关文章

  1. 【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT

    [题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模92484403 ...

  2. 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP

    [题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...

  3. 【CodeForces】913 E. Logical Expression

    [题目]E. Logical Expression [题意]令x=11110000(2),y=11001100(2),z=10101010(2),n次询问,每次要求用[与][或][非][括号]构成含至 ...

  4. 【CodeForces】913 C. Party Lemonade

    [题目]C. Party Lemonade [题意]给定n个物品,第i个物品重量为2^(i-1)价值为ci,每个物品可以无限取,求取总重量>=L的最小代价.1<=30<=n,1< ...

  5. 【Codeforces】Round #491 (Div. 2) 总结

    [Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...

  6. 【Codeforces】Round #488 (Div. 2) 总结

    [Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...

  7. 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂

    [bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...

  8. 【CodeForces】601 D. Acyclic Organic Compounds

    [题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...

  9. 【Codeforces】849D. Rooter's Song

    [算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...

随机推荐

  1. Java throw try catch

    public class Runtest { public static void main(String[] args) { // TODO Auto-generated method stub T ...

  2. 转载免安装版mysql的配置

    解压到自定义目录,我这里演示的是D:\wamp\mysql\   复制根目录下的my-default.ini,改名为my.ini,my.ini用下面内容替换 #以下是复制内容,这行可不复制 [clie ...

  3. 用到的C++标准库

    std::set<type>, 模板写的平衡二叉树的集合容器, method: insert, count, std:map<int, string>, 映射和多重映射基于某一 ...

  4. webgl学习笔记二-绘图多点

    写在前面 建议先看下第一篇webgl学习笔记一-绘图单点 第一篇文章,介绍了如何用webgl绘图一个点.接下来本文介绍的是如何绘制多个点.形成一个面. webgl提供了一种很方便的机制,即缓冲区对象, ...

  5. 洛谷 [USACO09OPEN]工作调度

    题面 读完题,我们会发现有一个很重要的信息,每件物品代价相同,但价值不同.那么我们很容易想到,在满足限制的情况下,我们肯定会选择价值尽可能大的物品. 我们可否用背包来实现呢,答案是否定的,或者说我不会 ...

  6. 什么是P问题,NP问题和NPC问题

    转载自:Matrix67的博客 什么是P问题.NP问题和NPC问题 这或许是众多OIer最大的误区之一.    你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问 ...

  7. Expect the Expected UVA - 11427(概率dp)

    题意: 每天晚上你都玩纸牌,如果第一次就赢了,就高高兴兴的去睡觉,如果输了就继续玩.假如每盘游戏你获胜的概率都为p,每盘游戏输赢独立.如果当晚你获胜的局数的比例严格大于p时才停止,而且每天晚上最多只能 ...

  8. java学习1-环境搭建

    1.材料准备 2.配置文档 3.验证java是否安装成功 打开cmd-->  java -version 提示以下即成功

  9. 【刷题】BZOJ 3365 [Usaco2004 Feb]Distance Statistics 路程统计

    Description 在得知了自己农场的完整地图后(地图形式如前三题所述),约翰又有了新的问题.他提供 一个整数K(1≤K≤109),希望你输出有多少对农场之间的距离是不超过K的. Input 第1 ...

  10. Wifi密码破解实战

    原文链接地址:http://www.freebuf.com/articles/wireless/127261.html https://www.baidu.com/?tn=98012088_4_dg& ...