2014 Multi-University Training Contest 9#11

Killing MonstersTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 562    Accepted Submission(s): 308

Problem Description

Kingdom Rush is a popular TD game, in which you should build some towers to protect your kingdom from monsters. And now another wave of monsters is coming and you need again to know whether you can get through it.

The path of monsters is a straight line, and there are N blocks on it (numbered from 1 to N continuously). Before enemies come, you have M towers built. Each tower has an attack range [L, R], meaning that it can attack all enemies in every block i, where L<=i<=R. Once a monster steps into block i, every tower whose attack range include block i will attack the monster once and only once. For example, a tower with attack range [1, 3] will attack a monster three times if the monster is alive, one in block 1, another in block 2 and the last in block 3.

A witch helps your enemies and makes every monster has its own place of appearance (the ith monster appears at block Xi). All monsters go straightly to block N.

Now that you know each monster has HP Hi and each tower has a value of attack Di, one attack will cause Di damage (decrease HP by Di). If the HP of a monster is decreased to 0 or below 0, it will die and disappear.
Your task is to calculate the number of monsters surviving from your towers so as to make a plan B.

Input

The input contains multiple test cases.

The first line of each case is an integer N (0 < N <= 100000), the number of blocks in the path. The second line is an integer M (0 < M <= 100000), the number of towers you have. The next M lines each contain three numbers, Li, Ri, Di (1 <= Li <= Ri <= N, 0 < Di <= 1000), indicating the attack range [L, R] and the value of attack D of the ith tower. The next line is an integer K (0 < K <= 100000), the number of coming monsters. The following K lines each contain two integers Hi and Xi (0 < Hi <= 10^18, 1 <= Xi <= N) indicating the ith monster’s live point and the number of the block where the ith monster appears.

The input is terminated by N = 0.

Output

Output one line containing the number of surviving monsters.

Sample Input

521 3 15 5 251 33 15 27 39 10

Sample Output

3

Hint

In the sample, three monsters with origin HP 5, 7 and 9 will survive.

 
简单的线段树,区间更新就可以!
 
 #include<cstdio>

 using namespace std;

 #define maxn 100000+10

 typedef long long LL;

 struct node{

     int l,r,m;

     LL sum,mark;

 }T[maxn<<];

 int a[maxn];

 void build(int id,int l,int r){

      T[id].l=l;   T[id].r=r;  T[id].m=(l+r)>>;  T[id].mark=;

      if(l==r)   { T[id].sum=a[l]; return;  }

      int m=(l+r)>>;

      build(id<<,l,m);  build((id<<)+,m+,r);

      T[id].sum=(T[id<<].sum+T[(id<<)+].sum);

 }

 void update(int id,int l,int r,int val){

      if(T[id].l==l&&T[id].r==r){

         T[id].mark+=val; return ;

      }

      T[id].sum+=(LL)val*(r-l+);

      if(T[id].m>=r)

           update(id<<,l,r,val);

      else if(T[id].m<l)

           update((id<<)+,l,r,val);

      else{

           update(id<<,l,T[id].m,val);

           update((id<<)+,T[id].m+,r,val);

      }

 }

 LL query(int id,int l,int r){

     if(T[id].l==l&&T[id].r==r)  return T[id].sum+T[id].mark*(LL)(r-l+);

     if(T[id].mark!=) {

         T[id<<].mark+=T[id].mark;

         T[(id<<)+].mark+=T[id].mark;

         T[id].sum+=(LL)(T[id].r-T[id].l+)*T[id].mark;  T[id].mark=;

     }

     if(T[id].m>=r){

           return query(id<<,l,r);

     }

     else if(T[id].m<l){

           return query((id<<)+,l,r);

     }

     else{

           return query(id<<,l,T[id].m)+query((id<<)+,T[id].m+,r);

     }

 }

 int main(){

     int n,Q,m;  char str[];   int b,c,d,l,r,v;

     while(scanf("%d",&n)==&&n){

             scanf("%d",&Q);

           for(int i=;i<=n;i++){

              a[i] = ;

           }

           build(,,n);

           for(int i=;i<Q;i++){

                scanf("%d%d%d",&l,&r,&v);

                     update(,l,r,v);

                }

           scanf("%d",&m);

           LL h;

           int x;

           int ans = ;

           for(int i = ;i<m;i++)

           {

               scanf("%I64d%d",&h,&x);

               if(query(,x,n)<h) ans++;

           }

           printf("%d\n",ans);

     }

     return ;

 }

2014 Multi-University Training Contest 9#11的更多相关文章

  1. HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

    Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  2. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. 2014 Multi-University Training Contest 9#6

    2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...

  4. 2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/法)

    解题报告 两人轮流取球,大的人赢,,, 贴官方题解,,,反正我看不懂.,,先留着理解 关于费马小定理 关于原根 找规律找到的,,,sad,,, 非常easy找到循环节为p-1,每个循环节中有一个非零的 ...

  5. 2014 Multi-University Training Contest 1/HDU4864_Task(贪心)

    解题报告 题意,有n个机器.m个任务. 每一个机器至多能完毕一个任务.对于每一个机器,有一个最大执行时间Ti和等级Li,对于每一个任务,也有一个执行时间Tj和等级Lj.仅仅有当Ti>=Tj且Li ...

  6. hdu 4937 2014 Multi-University Training Contest 7 1003

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) T ...

  7. hdu 4941 2014 Multi-University Training Contest 7 1007

    Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  8. hdu 4939 2014 Multi-University Training Contest 7 1005

    Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  9. 2015 Multi-University Training Contest 10(9/11)

    2015 Multi-University Training Contest 10 5406 CRB and Apple 1.排序之后费用流 spfa用stack才能过 //#pragma GCC o ...

随机推荐

  1. Java Generics and Collections-2.1

    2.1 子类化以及替换原理 为什么List<Integer> 不是List<Number> 的子类? 首先看下面的代码,这段代码是编译不过的 package java_gene ...

  2. Oracle 数据库基础——安装

    一.数据库基础知识 1.概念 数据库全称数据库管理系统,简称DBMS,是一种在计算机中,针对数据进行管理.存储.共享的一种技术. 2.分类 数据库的发展过程中,按逻辑模型可分为以下几种: 3.关系型数 ...

  3. 【2016-11-3】【坚持学习】【Day18】【Oracle 数据类型 与C#映射关系】

    大部分类型的对应关系:原文:http://2143892.blog.51cto.com/2133892/499353 序号 Oracle数据类型 .NET类型 GetOracleValue类型 DbT ...

  4. java 移位运算符

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  5. selenium自动化-java-封断言类2

    封装断言类 package streamax.com; import java.util.ArrayList; import java.util.List; import org.testng.Ass ...

  6. [No000042]CSS 之 平时那些你不敢用的字体

    CSS 之 平时那些你不敢用的字体 网上找找,无非如下一些中规中矩的结果: Windows下建议字体: 字体名称 对应英文 宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaH ...

  7. 测试工作的疑难杂症bugs

    一. 平台:安卓app 代码:重写onresume事件时,没有重新获取sessionId导致记录一下bug重现过程:1.登陆2.退出用户(不退出app)3.重新登录4.home键或者息屏5.再进入ap ...

  8. SQLite剖析之锁和并发控制

    在SQLite中,锁和并发控制机制都是由pager.c模块负责处理的,用于实现ACID(Atomic.Consistent.Isolated和Durable)特性.在含有数据修改的事务中,该模块将确保 ...

  9. 地理信息系统 - ArcGIS - 高/低聚类分析工具(High/Low Clustering ---Getis-Ord General G)

    前段时间在学习空间统计相关的知识,于是把ArcGIS里Spatial Statistics工具箱里的工具好好研究了一遍,同时也整理了一些笔记上传分享.这一篇先聊一些基础概念,工具介绍篇随后上传. 空间 ...

  10. React.js常识

    1.React的特点: 简单.声明式-自动dom操作. React核心:组件,组件的设计目的:提高代码复用率,降低测试难度和代码复杂度. 提高代码复用率:组建将数据和逻辑进行封装,类似面向对象的类: ...