Problem H

High bridge, low bridge

Q: There are one high bridge and one low bridge across the river. The river has flooded twice, why the high bridge is flooded twice but the low bridge is flooded only once?

A: Because the lower bridge is so low that it's still under water after the first flood is over.

If you're confused, here's how it happens:

  • Suppose high bridge and low bridge's heights are 2 and 5, respectively, and river's initial water level is 1.
  • First flood: the water level is raised to 6(Both bridges are flooded), and then back to 2(high bridge is not flooded anymore, but low bridge is still flooded).
  • Second flood: the water level is raised to 8(The high bridge is flooded again), and then back to 3.

Just a word game, right? The key is that if a bridge is still under water (i.e. the water level is no less than the bridge height) after a flood, then next time it will not be considered flooded again.

Suppose the i-th flood raises the water level to ai and then back to bi. Given n bridges' heights, how many bridges are flooded at least k times? The initial water level is 1.

Input

The input contains at most 25 test cases. Each test case begins with 3 integers n, m, k in the first line (1<=n,m,k<=105). The next line contains n integers hi, the heights of each bridge (2<=hi<=108). Each of the next m lines contains two integers ai and bi (1<=bi<ai<=108, ai>bi-1). The file size of the whole input does not exceed 5MB.

Output

For each test case, print the number of bridges that is flooded at least k times.

Sample Input

2 2 2
2 5
6 2
8 3
5 3 2
2 3 4 5 6
5 3
4 2
5 2

Output for the Sample Input

Case 1: 1
Case 2: 3

Explanation

For the second sample, 5 bridges are flooded 1, 2, 3, 2, 0 times, respectively.


The Ninth Hunan Collegiate Programming Contest (2013)

Problemsetter: Rujia Liu Special Thanks: Feng Chen, Md. Mahbubul Hasan

这道试题很好。用笔画一下,其实就是区间更新,区间询问的树状数组吧,关键是求更新的区间,其实直接使用StL的查找也是可以的。还是那个道理,二分查找的变法很多,

不要太依赖STL ,基础一定要打好。

#include <iostream>
#include <stdio.h>
#include <queue>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>
#include <map>
#include <stack>
#include <math.h>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std ;
typedef long long LL ;
const int Max_N= ;
struct Node{
int raise ;
int down ;
};
Node water[Max_N] ;
int bridge[Max_N] ;
int N ,M ,K ;
int find_first_big_id(int x){
int Left= ;
int Right=N ;
int mid ;
int ans_id=- ;
while(Left<=Right){
mid=(Left+Right)>> ;
if(bridge[mid]>x){
ans_id=mid ;
Right=mid- ;
}
else
Left=mid+ ;
}
return ans_id ;
}
int find_last_less_or_equal_id(int x){
int Left= ;
int Right=N ;
int mid ;
int ans_id=- ;
while(Left<=Right){
mid=(Left+Right)>> ;
if(bridge[mid]>x){
Right=mid- ;
}
else{
ans_id=mid ;
Left=mid+ ;
}
}
return ans_id ;
}
int C[Max_N] ;
inline int lowbit(int x){
return x&(-x) ;
}
void Insert(int id ,int x){
while(id<=N){
C[id]+=x ;
id+=lowbit(id) ;
}
}
int get_sum(int id){
int sum= ;
while(id>=){
sum+=C[id] ;
id-=lowbit(id) ;
}
return sum ;
}
int main(){
/*int x ;
while(cin>>N>>x){
for(int i=1;i<=N;i++)
cin>>bridge[i] ;
cout<<find_last_less_or_equal_id(x)<<endl ;
}*/
int L ,R ,ans ,k= ;
while(scanf("%d%d%d",&N,&M,&K)!=EOF){
for(int i=;i<=N;i++)
scanf("%d",&bridge[i]) ;
for(int i=;i<=M;i++)
scanf("%d%d",&water[i].raise,&water[i].down) ;
sort(bridge+,bridge++N) ;
water[].down= ;
fill(C,C+N+,) ;
for(int i=;i<M;i++){
L=find_first_big_id(water[i].down) ;
R=find_last_less_or_equal_id(water[i+].raise) ;
// cout<<L<<" "<<R<<endl ;
if(L==-||R==-)
continue ; Insert(L,) ;
Insert(R+,-) ;
}
ans= ;
for(int i=;i<=N;i++){
if(get_sum(i)>=K)
ans++ ;
}
printf("Case %d: %d\n",k++,ans) ;
}
return ;
}

The Ninth Hunan Collegiate Programming Contest (2013) Problem H的更多相关文章

  1. The Ninth Hunan Collegiate Programming Contest (2013) Problem A

    Problem A Almost Palindrome Given a line of text, find the longest almost-palindrome substring. A st ...

  2. The Ninth Hunan Collegiate Programming Contest (2013) Problem F

    Problem F Funny Car Racing There is a funny car racing in a city with n junctions and m directed roa ...

  3. The Ninth Hunan Collegiate Programming Contest (2013) Problem I

    Problem I Interesting Calculator There is an interesting calculator. It has 3 rows of button. Row 1: ...

  4. The Ninth Hunan Collegiate Programming Contest (2013) Problem J

    Problem J Joking with Fermat's Last Theorem Fermat's Last Theorem: no three positive integers a, b, ...

  5. The Ninth Hunan Collegiate Programming Contest (2013) Problem G

    Problem G Good Teacher I want to be a good teacher, so at least I need to remember all the student n ...

  6. The Ninth Hunan Collegiate Programming Contest (2013) Problem L

    Problem L Last Blood In many programming contests, special prizes are given to teams who solved a pa ...

  7. The Ninth Hunan Collegiate Programming Contest (2013) Problem C

    Problem C Character Recognition? Write a program that recognizes characters. Don't worry, because yo ...

  8. German Collegiate Programming Contest 2013:E

    数值计算: 这种积分的计算方法很好,学习一下! 代码: #include <iostream> #include <cmath> using namespace std; ; ...

  9. German Collegiate Programming Contest 2013:B

    一个离散化的简单题: 我用的是STL来做的离散化: 好久没写离散化了,纪念一下! 代码: #include<cstdio> #include<cstring> #include ...

随机推荐

  1. Java异常之checked与unchecked

    首先,java的异常分为Error和Exception.这两类都是接口Throwable的子类.Error及Exception及其子类之间的关系,大致可以用下图简述. 注意事项: 1. Error仅在 ...

  2. WCF 遇到 由于线程退出或应用程序请求,已放弃 I/O 操作 ListenerContextInputStream

    异常类型:IOException 异常消息:An exception has been thrown when reading the stream. 异常信息: at System.ServiceM ...

  3. (转)Lambda表达式详解

    本文转载自:http://www.cnblogs.com/knowledgesea/p/3163725.html 前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸 ...

  4. Verilog杂谈

    1. Testbech总是用reg去驱动DUT的input端口,因为需要在仿真期间设置和保持输入端的值(例如在initial中设置初值,在always中设置激励值): 2. 避免对局部reg在定义时赋 ...

  5. 获取URL参数

    function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)( ...

  6. EntityFramework ,ef 介绍

    EntityFramework之领域驱动设计实践 分层架构 在引入实例以前,我们有必要回顾,并进一步了解分层架构.“层”是一种体系结构模式[POSA1],也是被广大软件从业人员用得最为广泛而且最为灵活 ...

  7. 转载__直接拿来用!最火的Android开源项目(一)

    http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects 已分类汇总到 https://github.co ...

  8. 树莓派+qt+opencv

    树莓派:Qt开发套件和opencv安装sudo apt-get install qt4-dev-tools libqt4-dev 不用qt core 的话,其实只要按照 qt4-qmake就行了(只做 ...

  9. java类中serialversionuid 作用 是什么?举个例子说明

    serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的 ...

  10. jstatd命令

    jstatd [options] 此命令是一个RMI Server应用程序,提供了对JVM的创建和结束监视,也为远程监视工具提供了一个可以attach的接口options -nr 当一个存在的RMI ...