题目链接: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 (树状数组、区间覆盖最大值问题)的更多相关文章

  1. 2016北京网络赛 hihocoder 1391 Countries 树状数组

    Countries   描述 There are two antagonistic countries, country A and country B. They are in a war, and ...

  2. 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询

    题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...

  3. hdu 1754 I Hate It(树状数组区间求最值)2007省赛集训队练习赛(6)_linle专场

    题意: 输入一行数字,查询第i个数到第j个数之间的最大值.可以修改其中的某个数的值. 输入: 包含多组输入数据. 每组输入首行两个整数n,m.表示共有n个数,m次操作. 接下来一行包含n个整数. 接下 ...

  4. HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意:n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V ...

  5. 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  6. 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询

    题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...

  7. 【poj2155】Matrix(二维树状数组区间更新+单点查询)

    Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...

  8. 【bzoj3779】重组病毒 LCT+树上倍增+DFS序+树状数组区间修改区间查询

    题目描述 给出一棵n个节点的树,每一个节点开始有一个互不相同的颜色,初始根节点为1. 定义一次感染为:将指定的一个节点到根的链上的所有节点染成一种新的颜色,代价为这条链上不同颜色的数目. 现有m次操作 ...

  9. hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

随机推荐

  1. 红字差评系列1.第K小数

    [题目分析] 二分答案?smg,我太弱了 //不开longlong wa到挺了 #include <cstdio> #include <cstring> #include &l ...

  2. sql 、linq、lambda 查询语句的区别

    LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量中被查询的值 [group by 条件] Lambda ...

  3. Spring 定时任务2

    转载自http://www.cnblogs.com/nick-huang/p/4864737.html > 版本说明 <dependencies> <dependency> ...

  4. winfrom的两种拖拽方式和界面阴影

    方式1private Point mouseOffset; //记录鼠标指针的坐标 private bool isMouseDown = false; //记录鼠标按键是否按下 private voi ...

  5. Criterion & DetachedCriteria

    今天笔记主要是记录笔记,以及代码: criteria: 创建查询接口:createCriteria(class) 查询条件接口:add(各种条件); Restrictions 提供了设置参数的各种接口 ...

  6. socket详解(一)《转》

    在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器 ...

  7. How to Create Mixed Reality Videos for the Vive - with Two Controllers

    http://secondreality.co.uk/blog/how-to-create-mixed-reality-videos-for-the-vive-with-two-controllers ...

  8. python内置函数 3

    int( [x[, radix]])转换为字符串或数字为纯整数.如果参数是一个字符串,它必须包含一个可能有符号的十进制数作为一个 Python 整 数,可能嵌入空格.以 radix 参数给出的基数为基 ...

  9. centos 装VBOX

    #cd /etc/yum.repos.d/wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repoyum inst ...

  10. 读javascript高级程序设计14-错误处理与调试

    一  错误类型 ECMA规定了常见的7种错误类型: Error: 基类型.其他常见的错误类型都继承自该类型,一般供开发人员抛出自定义错误. EvalError:该类型会在eval()函数使用异常时被抛 ...