北京网赛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 ...
随机推荐
- 2016 ACM/ICPC Asia Regional Dalian Online
1009 Sparse Graph(hdu5876) 由于每条边的权值都为1,所以最短路bfs就够了,只是要求转置图的最短路,所以得用两个set来维护,一个用来存储上次扩散还没访问的点,一个用来存储这 ...
- Cheatsheet: 2015 05.01 ~ 05.31
.NET .NET on Mac for the OS X n00b without Mono via Visual Studio Code Microsoft frameworks deprecat ...
- 文件上传和下载(可批量上传)——Spring(二)
针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...
- Sprint(第七天11.20)
燃尽图
- yii学习笔记
学而不思则罔,思而不学则殆,适度的总结有利于学习效果的提升. 以前就是埋头看书很少动手所以学习效果不好. 学习yii的原因是自己基本功差,但是yii的学习本身也需要成本
- Python之SQLAlchemy学习
alchemy 英[ˈælkəmi] 美[ˈælkəmi] n. 炼金术; 炼丹术; (改变事物.物质的)魔力(或方法) ; (事物.物质的) 神秘变化; SQLAlchemy是Python中最有名的 ...
- AC自动机模板
贴份模板 胡大神和崔大神的组合模板 #include <iostream> #include<cstdio> #include<cstring> #include& ...
- [css3]CSS3选择器:nth-child和:nth-of-type之间的差异
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1709 一.深呼吸,直 ...
- Material Design风格的水波涟漪效果(Ripple Effect)的实现
Material Design是Google在2014年Google I/O大会上推出的一套全新的设计语言,经过接近两年的发展,可谓是以燎原之势影响着整个设计交互生态,和Material Design ...
- [maven] 常用插件解析
参考资料:http://my.oschina.net/zh119893/blog/276090 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完 ...