#1391 : Countries

时间限制:1000ms
单点时限:1000ms
内存限制:256MB

描述

There are two antagonistic countries, country A and country B. They are in a war, and keep launching missiles towards each other.

It is known that country A will launch N missiles. The i-th missile will be launched at time Tai. It flies uniformly and take time Taci from one country to the other. Its damage capability is Dai.

It is known that country B will launch M missiles. The i-th missile will be launched at time Tbi.

It flies uniformly and takes time Tbci from one country to the other. Its damage capability is Dbi.

Both of the countries can activate their own defending system.

The defending system of country A can last for time TA, while The defending system of country B can last for time TB.

When the defending system is activated, all missiles reaching the country will turn around and fly back at the same speed as they come.

At other time, the missiles reaching the country will do damages to the country.
(Note that the defending system is still considered active at the exact moment it fails)

Country B will activate its defending system at time X.

When is the best time for country A to activate its defending system? Please calculate the minimal damage country A will suffer.

输入

There are no more than 50 test cases.

For each test case:

The first line contains two integers TA and TB, indicating the lasting time of the defending system of two countries.

The second line contains one integer X, indicating the time that country B will active its defending system.

The third line contains two integers N and M, indicating the number of missiles country A and country B will launch.

Then N lines follow. Each line contains three integers Tai, Taci and Dai, indicating the launching time, flying time and damage capability of the i-th missiles country A launches.

Then M lines follow. Each line contains three integers Tbi, Tbci and Dbi, indicating the launching time, flying time and damage capability of the i-th missiles country B launches.

0 <= TA, TB, X, Tai, Tbi<= 100000000

1 <= Taci, Tbci <= 100000000

0 <= N, M <= 10000

1 <= Dai, Dbi <= 10000

输出

For each test case, output the minimal damage country A will suffer.

提示

In the first case, country A should active its defending system at time 3.

Time 1: the missile is launched by country A.

Time 2: the missile reaches country B, and country B actives its defending system, then the missile turns around.

Time 3: the missile reaches country A, and country A actives its defending system, then the missile turn around.

Time 4: the missile reaches country B and turns around.

Time 5: the missile reaches country A and turns around.

Time 6: the missile reaches country B, causes damages to country B.

样例输入
2 2
2
1 0
1 1 10
4 5
3
2 2
1 2 10
1 5 7
1 3 2
0 4 8
样例输出
0
17
/*
hihocoder 1391 树状数组 problem:
A,B两个敌对国分别有1W个导弹,每个导弹有各自的发射时间、飞行时间、造成伤害。两国各有一个防御系统,
且分别有各自的持续时间(相当于防御一个时间区间?),开启防御系统时,所有到达该国的导弹按原速度反向。
已知B国在X时间点开启防御系统,问A国最少会受多少的伤害。(以上数值伤害1e4,其余1e8) solve:
昨天比赛心态爆炸.......Orz
因为导弹可以在两个国家之间互相弹来弹去. 我们可以计算出这个导弹最早攻击到A的时间l和最晚到达A的时间r(假设A防御时间无限)
如果开启防御后无法覆盖[l,r]那么这个导弹总会攻击到A.
然后问题就成了已知很多个区间的价值,完全覆盖是能够得到价值.求长度为len的区间最多能得到多少价值.
所以可以通过树状数组来解决了.
如果从小到大枚举r,找出以当前点为右端点能覆盖多少的值.
那么每次就要将区间的值赋予l,因为只有左端点小于等于l时才覆盖这个区间. //比赛时少了个判断, 而且求k值错了...卒 hhh-2016-09-25 15:22:55
*/
#pragma comment(linker,"/STACK:124000000,124000000")
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <math.h>
#define lson i<<1
#define rson i<<1|1
#define ll long long
#define clr(a,b) memset(a,b,sizeof(a))
#define key_val ch[ch[root][1]][0]
using namespace std;
#define mod 1004535809LL const int maxn = 5e5;
int n,m,k;
ll ta,tb,x;
ll u,v,w,y,tot; map<ll,ll> mp;
ll sum;
ll mis[100010];
struct node
{
ll l,r;
ll w;
} pnode[maxn * 10]; bool cmp(node a,node b)
{
return a.r< b.r;
} ll s[maxn*5];
int lowbit(int x)
{
return x&(-x);
} void add(int pos,ll val)
{
if(pos <= 0)
return ;
while(pos <= tot)
{
s[pos] += val;
pos += lowbit(pos);
}
} ll cal(int pos)
{
ll cnt = 0;
if(pos <= 0)
return 0;
while(pos > 0)
{
cnt += s[pos];
pos -= lowbit(pos);
}
return cnt;
} int cnt ;
int main()
{
while(scanf("%lld %lld",&ta,&tb)!=EOF)
{
mp.clear();
sum=0;
tot=1;
cnt=1;
scanf("%lld",&x);
y=x+tb;
memset(s,0,sizeof(s));
scanf("%d %d",&n,&m);
for(int i=0; i<n; i++)
{
scanf("%lld %lld %lld",&u,&v,&w);
if(u+v>y||u+v<x) continue;
sum+=w; k = (y - u) / v;
if(k % 2LL == 0LL)
k-=3LL;
while(k*v + u <= y) k +=2LL; //k=3;
//while(u+k*v<=y) k+=2;
pnode[cnt].l = u+2LL*v;
pnode[cnt].r = u+(k-1LL)*v;
// cout << pnode[cnt].l << " " <<pnode[cnt].r <<endl;
mis[tot ++] = u+2LL*v, mis[tot++] = u+(k-1LL)*v;
pnode[cnt++].w= w;
}
for(int i=0; i<m; i++)
{
scanf("%lld %lld %lld",&u,&v,&w);
sum+=w; k = (y - u) / v;
if(k % 2LL == 1LL)
k-=3LL;
while(u+k*v<=y) k +=2LL; pnode[cnt].l = u+v;
// if(u + 2*v > y || u+ 2*v < x)
// pnode[cnt].r = pnode[cnt].l;
// else{
pnode[cnt].r =u+(k-1LL)*v;
mis[tot++] = u+(k-1LL)*v;
// }
mis[tot ++] = u+v;
pnode[cnt++].w= w;
} sort(mis+1,mis+tot);
int t = unique(mis+1,mis+tot) - mis;
sort(pnode+1,pnode + cnt,cmp);
for(int i= 1; i < t; i++)
{
mp[mis[i]] = i;
} int cur = 1;
ll Max = 0; for(int i = 1; i < t; i++)
{
ll ed = mis[i];
ll from = ed - ta; while(mp[pnode[cur].r] == i && cur < cnt)
{
add(mp[pnode[cur].l],pnode[cur].w);
cur ++;
}
int pos = lower_bound(mis+1,mis+t,from) - mis;
Max =max(Max,cal(i) - cal(pos-1));
}
// cout <<Max <<endl;
printf("%lld\n",sum - Max);
}
return 0;
}

  

hihocoder 1391 树状数组的更多相关文章

  1. 2015 北京网络赛 E Border Length hihoCoder 1231 树状数组 (2015-11-05 09:30)

    #1231 : Border Length 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Garlic-Counting Chicken is a special spe ...

  2. 2015 北京网络赛 C Protecting Homeless Cats hihoCoder 1229 树状数组

    题意:求在平面上 任意两点连线,原点到这个点的距离小于d的点对有多少个,n=200000; 解: 以原点为圆心做一个半径为d的圆,我们知道圆内的点和园内以外的点的连线都是小于d的还有,圆内和园内的点联 ...

  3. 离线树状数组 hihocoder 1391 Countries

    官方题解: // 离线树状数组 hihocoder 1391 Countries #include <iostream> #include <cstdio> #include ...

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

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

  5. hihoCoder 1145 幻想乡的日常(树状数组 + 离线处理)

    http://hihocoder.com/problemset/problem/1145?sid=1244164 题意: 幻想乡一共有n处居所,编号从1到n.这些居所被n-1条边连起来,形成了一个树形 ...

  6. 【Hihocoder 1167】 高等理论计算机科学 (树链的交,线段树或树状数组维护区间和)

    [题意] 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 少女幽香这几天正在学习高等理论计算机科学,然而她什么也没有学会,非常痛苦.所以她出去晃了一晃,做起了一些没什么意 ...

  7. HihoCoder 1488 : 排队接水(莫队+树状数组)

    描述 有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟. 由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小. 小 ...

  8. 北京网赛I题 hiho1391 (树状数组、区间覆盖最大值问题)

    题目链接:http://hihocoder.com/problemset/problem/1391 题意:A国和B国向对方分别投射N枚和M枚导弹(发射时间,飞行时间,伤害值),同时两国各自都有防御系统 ...

  9. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

随机推荐

  1. python的Virtualenv

    Virtualenv 虚拟的 Python 环境(简称 venv) 是一个能帮助你在本地目录安装不同版本的 Python 模块的 Python 环境,你可以不再需要在你系统中安装所有东西就能开发并测试 ...

  2. python之路--day11---迭代器和生成器

    迭代: 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 为什么要有迭代器: 数据类型的取值,字符串,列表,元组依靠索引可以取值,但是字典,集合,文件这些数据类型无法 ...

  3. SQL SERVER 游标的使用

    首先,关于什么是游标大家可以看看这篇文章,介绍得非常详细!! SQL Server基础之游标 下面是我自己的应用场景-- 有个需求,需要把数据库表里面某一个字段的值设为随机不重复的值. 表是这样的: ...

  4. Win7下安装composer, 并使用其安装smarty

    安装composer需要开启PHP openssl扩展. 1) 先查看PHP是否开启了openssl扩展 键盘win+r 输出cmd, 可以看到Dos窗口, 然后执行php -m (需要添加PHP环境 ...

  5. c 语言常量

    1,整数常量 整数常量可以是十进制.八进制或十六进制的常量.前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制. 整数常量也可以带一个后缀,后缀是 U 和 L 的组合 ...

  6. HTTP协议的消息头:Content-Type和Accept的作用

    一.背景知识 1.概述 Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的http报头结构:通用报头|请求报头|实体报头 响应方的http报头结构:通用报头|响应报头|实体报头 Acc ...

  7. Tumblr:我们是如何从 PHP 5 升级到 PHP 7 的

    Tumblr 团队经常在寻找新的方式来提升网站的性能.这意味着要给访问量大的代码增加缓存,找到更快的 CDN 配置,或者升级基础软件. 最近,通过一次跨团队的努力,我们将全部 web 服务器战舰从 P ...

  8. uvalive 5834 Genghis Khan The Conqueror

    题意: 给出一个图,边是有向的,现在给出一些边的变化的信息(权值大于原本的),问经过这些变换后,MST总权值的期望,假设每次变换的概率是相等的. 思路: 每次变换的概率相等,那么就是求算术平均. 首先 ...

  9. oracle:批量插入不同方案对比

    实时测试的速度: --48466条数据 --1.297 inline view更新法 inline view更新法就是更新一个临时建立的视图 update (select a.join_stateas ...

  10. Tensorflow计算模型 —— 计算图

    转载自:http://blog.csdn.net/john_xyz/article/details/69053626 Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图 ...