hihocoder 1391 树状数组
#1391 : Countries
描述
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 树状数组的更多相关文章
- 2015 北京网络赛 E Border Length hihoCoder 1231 树状数组 (2015-11-05 09:30)
#1231 : Border Length 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Garlic-Counting Chicken is a special spe ...
- 2015 北京网络赛 C Protecting Homeless Cats hihoCoder 1229 树状数组
题意:求在平面上 任意两点连线,原点到这个点的距离小于d的点对有多少个,n=200000; 解: 以原点为圆心做一个半径为d的圆,我们知道圆内的点和园内以外的点的连线都是小于d的还有,圆内和园内的点联 ...
- 离线树状数组 hihocoder 1391 Countries
官方题解: // 离线树状数组 hihocoder 1391 Countries #include <iostream> #include <cstdio> #include ...
- 2016北京网络赛 hihocoder 1391 Countries 树状数组
Countries 描述 There are two antagonistic countries, country A and country B. They are in a war, and ...
- hihoCoder 1145 幻想乡的日常(树状数组 + 离线处理)
http://hihocoder.com/problemset/problem/1145?sid=1244164 题意: 幻想乡一共有n处居所,编号从1到n.这些居所被n-1条边连起来,形成了一个树形 ...
- 【Hihocoder 1167】 高等理论计算机科学 (树链的交,线段树或树状数组维护区间和)
[题意] 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 少女幽香这几天正在学习高等理论计算机科学,然而她什么也没有学会,非常痛苦.所以她出去晃了一晃,做起了一些没什么意 ...
- HihoCoder 1488 : 排队接水(莫队+树状数组)
描述 有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟. 由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小. 小 ...
- 北京网赛I题 hiho1391 (树状数组、区间覆盖最大值问题)
题目链接:http://hihocoder.com/problemset/problem/1391 题意:A国和B国向对方分别投射N枚和M枚导弹(发射时间,飞行时间,伤害值),同时两国各自都有防御系统 ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
随机推荐
- C语言第一次作业——输入输出格式
题目1温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码 #include& ...
- 【Alpha版本】冲刺阶段 - Day6 - 乘风
今日进展 袁逸灏:1.实现了碰撞的判定:2.代码规范化:3.解决了项目基本代码.(7h) 刘伟康:补充了上次未完成的任务,即检查代码规范,增加AS规范并整理上传至码云.除此之外,学习了部分 Andro ...
- TensorFlow实现Softmax Regression识别手写数字中"TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败”问题
出现问题: 在使用TensorFlow实现MNIST手写数字识别时,出现"TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应 ...
- 解决flask的端口占用
问题:socket.error: [Errno 48] Address already in use 在编辑flask代码时,如果没有关闭flask的程序,默认的5000端口一直被占用. 再次运行fl ...
- python的dir、help、str用法
当你给dir()提供一个模块名字时,它返回在那个模块中定义的名字的列表.当没有为其提供参数时, 它返回当前模块中定义的名字的列表.dir() 函数使用举例: 1 2 3 4 5 6 >>& ...
- Document Object Model
什么是DOM W3C制定的书写HTML分析器的标准接口规范 全称 Document Object Model 文档对象模型DOM为HTML文档提供的一个API(接口) 可以操作HTML文档 <! ...
- NFC驱动调试
1.NFC基本概念: NFC 又称为近场通信,是一种新兴技术,可以在彼此靠近的情况下进行数据交换,是由非接触式射频识别(RFID) 及互连互通技术整合演变而来,通过单一芯片集成感应式读卡器: NFC有 ...
- Nginx动静分离架构
Nginx动静分离简单来说就将动态与静态资源分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat,Res ...
- Spring Security入门(3-4)Spring Security 异常处理、异常传递和异常获取
- React-redux使用中有关Provider问题
先上错误: Warning: Failed prop type: Invalid prop `children` of type `array` supplied to `Provider`, exp ...