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. HDP2.4安装(三):MySql安装

    在安装Ambari时,Ambari默认的数据库是ProstgreSQL,对ProstgreSQL不太熟悉,选择使用MySql. 但Centos 7 默认支持的是MariaDB数据库. MariaDB是 ...

  2. 每日学习心得:未定义的命名空间前缀"xsd"问题和<%%>、<%=%>、<%$%>、<%@%>的区别

    2013-6-29 1. 未定义的命名空间前缀“xsd” 上周在项目开发中遇到这样的一个问题,在一个页面用到了自定义的Picker控件,在IE6.7.8.9以及IE10兼容模式下都没有任何问题,但是一 ...

  3. MongoDB备份与导入

    导出mongodb的数据 mongodump -d nodes -o url 导入mongodb数据mongorestore --db nodes url 删除mongodb的数据库db.dropDa ...

  4. 工作中简单又实用的vim配置

    set number syntax enable set tabstop=4 set shiftwidth=4 set noexpandtab set cindent set autoindent s ...

  5. 【Redis】配置redis主从复制

    阅读目录 redis-3.2.1.master tar zxvf redis-3.2.1.tar.gz mv redis-3.2.1 redis-3.2.1.slave-1 tar zxvf redi ...

  6. 51nod 1336 RMQ逆问题

    RMQ问题是一类区间最值问题,这里给出一个特殊的RMQ问题,初始给定一个n长的排列P,注:n长排列是指有1~n这n个整数构成的一个序列每个整数恰好出现一次.并对这个排列P进行M次查询操作,每次查询形如 ...

  7. opacity兼容写法

    .opacity{ position: absolute; top: 0px;left: 0px; background: #000; filter:alpha(opacity=50); /* IE ...

  8. (转)HelloWorld CMake CMake中构建静态库与动态库及其使用

    继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello ...

  9. suibi1117

    测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等. 我所了解的模块接口测试大体分为两类:模块接口测试和web接口测试 模块接口测试是单元测试的基础.它主要测试模块的调用 ...

  10. js方法收藏

    1.验证非负数字 //onfocusout="checkQty(this);" function checkQty(obj) { //排除0开头的非法输入 if (obj.valu ...