3928. 【NOIP2014模拟11.6】射击 (Standard IO)

Time Limits: 1000 ms Memory Limits: 65536 KB

Description

有问题,找副连,无聊的时候当然也可以找他啦。小W找到了他的叔叔——东厂厂长——宇宙超级无敌老WS yy。他们叔侄两个商量之后决定用弹弓打破社区里的一些窗户,但是弹弓每秒只能彻底打破一扇窗户。而且如果某户窗户的主人回来了的话,他们就不能进行破坏了(不然会死得很惨的)。因为有的人装的玻璃好,有的人装的玻璃差,有的人装的玻璃高,有的人装的玻璃矮,所以你不能要求他们叔侄两个打破不同的窗户获得的快乐值必须相同。现在他们想知道在能活着的情况下能够获得的最大快乐值。

Input

第一行一个正整数n,表示共有n个窗户。

接下来n行,每行两个整数,第一个为窗子的主人回来的时刻(秒),第二个为破坏该窗户所能获得的快乐值。

Output

最大的快乐值。

Sample Input

4

1 19

2 10

1 20

2 15

Sample Output

35

Hint

样例说明:

在第0个时刻,他们选择破坏掉3号窗户,在第1个时刻,因为1号窗户的主人已经回来了,所以不能去破坏1号窗户,只能去破坏2号窗户或4号窗户,显然选择4号窗户。总的快乐值就是20+15=35。

Data Constraint

20%的数据,n<=100。

40%的数据,n<=50000。

100%的数据,n<=200000,快乐值的绝对值不超过32767,时刻非负且小于2^31。

题解

这道题有人说用并查集,但是我觉得用贪心+堆更好理解

记第 i 个窗户时间为 a [ i ] . t ,快乐值为a [ i ] . c

先将时间从小到大排序

然后从头开始加,用小根堆维护已选择的窗户

如果个数没达到当前上限,那就选择

如果个数已经达到了上限,而且当前的 c 大于堆顶元素,那就替换

ps:好久没写堆了,可能有点问题,但是能过

代码

#include<cstdio>
#include<algorithm>
#include<vector>
#define N 200010
using namespace std;
struct point{
long t,c;
}a[N];
vector<point>dui; bool operator >(point a,point b)
{
return a.c>b.c;
}
bool operator <(point a,point b)
{
return a.c<b.c;
} bool tmp(point a,point b)
{
if(a.t!=b.t)return a.t<b.t;
else return a>b;
} void ins(point key)
{ long now;
dui.push_back(key);
for(now=dui.size()-1;now>0&&dui[now>>1]>dui[now];now>>=1)
swap(dui[now],dui[now>>1]);
}
void gai(point key)
{ long now;
bool t;
dui[0]=key;
now=0;
t=true;
while((now<<1)+1<=dui.size()&&t){
t=false;
if(dui[now<<1]<dui[(now<<1)+1]){
if(dui[now]>dui[now<<1]){
swap(dui[now],dui[now<<1]);
now<<=1;
t=true;
}
}else
if(dui[now]>dui[(now<<1)+1]){
swap(dui[now],dui[(now<<1)+1]);
now=(now<<1)+1;
t=true;
}
}
} int main()
{ long n,i,ans=0;
scanf("%ld",&n);
for(i=1;i<=n;i++)
scanf("%ld%ld",&a[i].t,&a[i].c);
sort(a+1,a+n+1,tmp);
for(i=1;i<=n;i++)if(a[i].t!=0){
if(dui.size()<a[i].t&&a[i].c>0)
ins(a[i]);
else if(a[i].c>dui[0].c)
gai(a[i]);
}
for(i=0;i<dui.size();i++)
ans+=dui[i].c;
printf("%ld\n",ans);
return 0;
}

JZOJ 3928. 【NOIP2014模拟11.6】射击的更多相关文章

  1. JZOJ 3929. 【NOIP2014模拟11.6】创世纪

    3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...

  2. JZOJ 3927. 【NOIP2014模拟11.6】可见点数

    3927. [NOIP2014模拟11.6]可见点数 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description ZP ...

  3. [JZOJ 4307] [NOIP2015模拟11.3晚] 喝喝喝 解题报告

    题目链接: http://172.16.0.132/senior/#main/show/4307 题目: 解题报告: 题目询问我们没出现坏对的连续区间个数 我们考虑从左到有枚举右端点$r$,判断$a[ ...

  4. 【NOIP2014模拟11.3】噪音

    题目 FJ有M个牛棚,编号1至M,刚开始所有牛棚都是空的.FJ有N头牛,编号1至N,这N头牛按照编号从小到大依次排队走进牛棚,每一天只有一头奶牛走进牛棚.第i头奶牛选择走进第p[i]个牛棚.由于奶牛是 ...

  5. 【NOIP2014模拟11.3】蛋糕

    题目 今天是Bessie的生日,他买了一个蛋糕和朋友们一起分享,蛋糕可以看成是一个R行C列的表格,共有R*C个格子,每个格子都有一个0至9的数字,表示该格子蛋糕拥有的巧克力.现在Bessie要把蛋糕横 ...

  6. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

  7. JZOJ 3508. 【NOIP2013模拟11.5B组】好元素

    3508. [NOIP2013模拟11.5B组]好元素(good) (File IO): input:good.in output:good.out Time Limits: 2000 ms  Mem ...

  8. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...

  9. JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)

    3505. [NOIP2013模拟11.4A组]积木(brick) (File IO): input:brick.in output:brick.out Time Limits: 1000 ms Me ...

随机推荐

  1. 34)PHP,PHP从数据库读取数据并在html中显示

    首先是我的数据库截图: 然后展示我的php文件: b.php文件: <?php $link= mysqli_connect('localhost','root','root'); // mysq ...

  2. certutil

    计算摘要 certutil -hashfile inst.ini MD2 certutil -hashfile inst.ini MD5 certutil -hashfile inst.ini SHA ...

  3. Vscode 下 PlantUML 插件的安装(windows and ubuntu)

    目录 Windows 下安装 JAVA 安装环境配置: 测试 Ubuntu 16.04 下安装 Windows 下安装 Vscode graphviz PlantUML JAVA(推荐长期稳定版本,官 ...

  4. linux重定向与管道符(一)

    linux重定向和管道符 为什么要使用重定向 1.当屏幕输出的信息很重要,而且我们需要将他存下来的时候: 2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时: 3.系统的例行命令,例如定时任务的执 ...

  5. 01-Java 教程

    一.我的第一个 java 程序 创建文件 HelloWorld.java(文件名需与类名一致), 代码如下: public class HelloWorld { public static void ...

  6. linux误删除恢复(未验证)

    extundelete 大家基本都知道,在linux上误删除了东西后果是很严重的,尤其是在服务器上误删除了东西,对于字符终端,想要实现恢复删除的数据更是难上加难,对于Linux误删除了重要的东西,虽然 ...

  7. sql查询语句解析过程--根据网络资料整理

    查询语句: (8)SELECT(9)DISTINCT(11)<TopNum> <selectlist> (1)FROM<left_table> (3)<joi ...

  8. python掉包侠与深浅拷贝

    今日所得 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝 包 在学习模块的时候我们了解过模块的四种表现形式,其中的一种就是包. 什么是包? 它是一系列模块文件的结合体,表示 ...

  9. 安装php5.4 mv9 +apache2.2+mysql5.5问题好多。

    1 网站目录的设置,网站 默认文件的加载. 2 php.ini文件的加载问题.

  10. Python类变量与实例变量及成员函数修饰方式说明(与Java定义方式进行类比)

    Python类中的变量有类变量和实例变量之分. 类变量:变量绑定在类上,同一个类之间的共享变量,类比于Java中的静态变量static 公有变量定义 Java 的定义方式 class Test{ pu ...