北京网赛I题 hiho1391 (树状数组、区间覆盖最大值问题)
题目链接:http://hihocoder.com/problemset/problem/1391
题意:A国和B国向对方分别投射N枚和M枚导弹(发射时间,飞行时间,伤害值),同时两国各自都有防御系统,导弹碰到防御系统会发生反弹。B国防御时间固定,求A国受到的最小伤害。
思路:对于从A国发射的导弹,判断到达B时(a+b)是否在B国防御区间[x , x + Tb]内,如果不在就不用管了,在的话计算出导弹区间[l , r],如果A国防御区间不能覆盖导弹区间,将受到伤害。对B国发射的导弹同理。
处理出每枚导弹的属性后按右区间r排序,将伤害值d存入左端点l中,树状数组维护一下。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define lowbit(x) x&(-x)
using namespace std;
const int N = 2e4 + 10;
int c[N],t[N];
map<int,bool> vis;
struct node
{
int l,r,d;
}q[N];
bool cmp(node a,node b)
{
return a.r < b.r;
}
void update(int pos,int k,int n)
{
while(pos <= n)
{
c[pos] += k;
pos += lowbit(pos);
}
}
int sum(int pos)
{
int res = 0;
while(pos)
{
res += c[pos];
pos -= lowbit(pos);
}
return res;
}
int main()
{
int Ta,Tb,x,n,m;
while(scanf("%d %d %d %d %d",&Ta,&Tb,&x,&n,&m) != EOF)
{
int num = 1, sum0 = 0, num0 = 1, ans = 0;
memset(c,0,sizeof(c));
memset(t,0,sizeof(t));
vis.clear();
for(int i = 1; i <= n; i++)
{
int a,b,d;
scanf("%d %d %d",&a,&b,&d);
if(a + b >= x && a + b <= x + Tb)
{
q[num].l = a + 2*b;
q[num].r = a + 2*b + (x + Tb - a - b)/(2*b) * (2*b);//后半项表示在B国防御系统形成的区间长度(不大于x+Tb-(a+b)且为周期2b的倍数)
q[num].d = d;
if(!vis[q[num].l])
{
t[num0++] = q[num].l;
vis[q[num].l] = 1;
}
sum0 += d;
num++;
}
}
for(int i = 1; i <= m; i++)
{
int a,b,d;
scanf("%d %d %d",&a,&b,&d);
q[num].l = a + b;
if(a + 2*b < x || a + 2*b > x + Tb)
q[num].r = a + b;
else
q[num].r = a + 3*b + (x + Tb - a - 2*b)/(2*b) * (2*b);
q[num].d = d;
if(!vis[q[num].l])
{
t[num0++] = q[num].l;
vis[q[num].l] = 1;
}
sum0 += d;
num++;
}
sort(q + 1, q + num, cmp);
sort(t + 1, t + num0);
for(int i = 1; i < num; i++)
{
int tmp1 = lower_bound(t + 1, t + num0, q[i].r - Ta) - t - 1;
int tmp2 = upper_bound(t + 1, t + num0, q[i].r) - t - 1;
int tmp3 = lower_bound(t + 1, t + num0, q[i].l) - t;
update(tmp3, q[i].d, num0 - 1);
ans = max(ans, sum(tmp2) - sum(tmp1));
}
printf("%d\n",sum0 - ans);
}
return 0;
}
北京网赛I题 hiho1391 (树状数组、区间覆盖最大值问题)的更多相关文章
- 2016北京网络赛 hihocoder 1391 Countries 树状数组
Countries 描述 There are two antagonistic countries, country A and country B. They are in a war, and ...
- 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询
题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...
- hdu 1754 I Hate It(树状数组区间求最值)2007省赛集训队练习赛(6)_linle专场
题意: 输入一行数字,查询第i个数到第j个数之间的最大值.可以修改其中的某个数的值. 输入: 包含多组输入数据. 每组输入首行两个整数n,m.表示共有n个数,m次操作. 接下来一行包含n个整数. 接下 ...
- HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意:n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V ...
- 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...
- 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询
题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...
- 【poj2155】Matrix(二维树状数组区间更新+单点查询)
Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...
- 【bzoj3779】重组病毒 LCT+树上倍增+DFS序+树状数组区间修改区间查询
题目描述 给出一棵n个节点的树,每一个节点开始有一个互不相同的颜色,初始根节点为1. 定义一次感染为:将指定的一个节点到根的链上的所有节点染成一种新的颜色,代价为这条链上不同颜色的数目. 现有m次操作 ...
- hdu 4638 树状数组 区间内连续区间的个数(尽可能长)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
随机推荐
- WPFの三种方式实现快捷键
最近,对wpf添加快捷键的方式进行了整理.主要用到的三种方式如下: 一.wpf命令: 资源中添加命令 <Window.Resources> <RoutedUICommand x:Ke ...
- 将B表的字段内容插入到A表字段中
update hy_b_hacker as h , ( SELECT ( @rowNO := @rowNo +1 ) AS rowno, ip FROM ( SELECT * FROM hy_b_se ...
- Chrom 浏览器一些命令
https://webkit.org/build-tools/ 开发环境搭建 开源:http://www.17ky.net/kyxm/4_0_3_2_0_0/ http://www.chromium ...
- Mysql 中有关日期的函数(sql)
DAYOFWEEK(date)返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六).这些索引值对应于ODBC标准.mysql> select DAYOFWEEK('1998-0 ...
- APP链接请求电话
1.使用OpenURL执行:[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:07551111&qu ...
- 20160928_CentOS6.4x64_Oracle11gR2x64
1.“Oracle Database 11g Release 2” 下载地址: http://www.oracle.com/technetwork/database/enterprise-editio ...
- Gradle version 2.2 is required. Current version is 2.14.1.
gradle版本错误: 1. 修改gradle\wrapper\gradle-wrapper.properties文件: distributionUrl=https\://services.gradl ...
- idea首次提交项目
http://www.cnblogs.com/exmyth/p/6133289.html
- Hbase写入hdfs源码分析
版权声明:本文由熊训德原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/258 来源:腾云阁 https://www.qclo ...
- Hbase的WAL在RegionServer基本调用过程
版权声明:本文由熊训德原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/221 来源:腾云阁 https://www.qclo ...