【扫描线或树状数组】CSU 1335 高桥和低桥
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1335
【题意】
- 给定n座桥的高度,给定m次洪水每次的涨水水位ai和退水水位bi
- 询问有多少座桥被淹的次数大于等于k
- 洪水最开始的水位为1
【思路】
- 每座桥被淹一次是这样的:开始时的水位小于桥的高度,洪水最高点的水位不小于桥的高度,如有一座高度为5的桥,对于数据7 6和7 3被淹的次数都是1(看5在不在(1,7]的区间内)
- 把n座桥排序,每次洪水都有一个区间的桥被淹,问最后每座桥被淹多少次
- 这就是裸的扫描线,或者树状数组区间修改单点查询也可以
【AC】
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
typedef long long ll; const int maxn=1e5+;
int a[maxn];
int n,m,k;
int f[maxn];
void init()
{
memset(f,,sizeof(f));
}
int main()
{
int cas=;
while(~scanf("%d%d%d",&n,&m,&k))
{
init();
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+,a+n+);
int x,y;
int st=,ed;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
ed=x;
int pos1=upper_bound(a+,a++n,st)-a;
int pos2=upper_bound(a+,a++n,ed)-a-;
f[pos1]++;
f[pos2+]--;
st=y;
}
int ans=;
int s=;
for(int i=;i<=n;i++)
{
s+=f[i];
if(s>=k) ans++;
}
printf("Case %d: %d\n",++cas,ans);
}
return ;
}
扫描线
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
typedef long long ll; const int maxn=1e5+;
int a[maxn];
int tree[maxn];
int n,m,k;
int lowbit(int x)
{
return x&(-x);
}
void add(int k,int x)
{
while(k<=n)
{
tree[k]+=x;
k+=lowbit(k);
}
}
int query(int k)
{
int res=;
while(k)
{
res+=tree[k];
k-=lowbit(k);
}
return res;
}
void init()
{
memset(tree,,sizeof(tree));
}
int main()
{
int cas=;
while(~scanf("%d%d%d",&n,&m,&k))
{
init();
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+,a+n+);
int x,y;
int st=,ed;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
ed=x;
int pos1=upper_bound(a+,a++n,st)-a;
int pos2=upper_bound(a+,a++n,ed)-a-;
add(pos1,);
add(pos2+,-);
st=y;
}
int ans=;
for(int i=;i<=n;i++)
{
if(query(i)>=k)
{
ans++;
}
}
printf("Case %d: %d\n",++cas,ans);
}
return ;
}
树状数组区间修改单点查询
【扫描线或树状数组】CSU 1335 高桥和低桥的更多相关文章
- CSU 1335: 高桥和低桥 (二分查找,树状数组)
Description 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不 ...
- CSU 1335 高桥和低桥
开始队友说是线段树,看了看貌似也是,上手敲了个嵌套的线段树,O(nlognlogn)的复杂度果断tle了 TAT 思路:对h[i]排序,对每次涨水退水,先用二分查找,再用一个数组保存当前点之后所有点被 ...
- csuoj 1335: 高桥和低桥
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1335 1335: 高桥和低桥 Time Limit: 1 Sec Memory Limit: 1 ...
- BZOJ1878: [SDOI2009]HH的项链[树状数组 离线]
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3486 Solved: 1738[Submit][Statu ...
- BZOJ1878: [SDOI2009]HH的项链[树状数组+离线 | 主席树]
题意: 询问区间不同种类颜色数 [2016-11-15] 离线好厉害 对于每一个区间询问,一个数只考虑一次,那么考虑他最后出现的一次 将询问按r排序 从1到n扫描,用树状数组维护一个位置应不应该考虑( ...
- bzoj 4822: [Cqoi2017]老C的任务【扫描线+树状数组+二维差分】
一个树状数组能解决的问题分要用树套树--还写错了我别是个傻子吧? 这种题还是挺多的,大概就是把每个矩形询问差分拆成四个点前缀和相加的形式(x1-1,y1-1,1)(x2.y2,1)(x1-1,y2,- ...
- 【树状数组】CSU 1811 Tree Intersection (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 题目大意: 一棵树,N(2<=N<=105)个节点,每个节点有一种颜 ...
- TZOJ 4602 高桥和低桥(二分或树状数组+二分)
描述 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算“淹了两次”.举 ...
- CSU - 1551 Longest Increasing Subsequence Again —— 线段树/树状数组 + 前缀和&后缀和
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1551 题意: 给出一段序列, 删除其中一段连续的子序列(或者不删), 使得剩下的序列 ...
随机推荐
- mongodb主从配置信息查看与确认
在local库中不仅有主从日志 oplog集合,还有一个集合用于记录主从配置信息 system.replset: > use local > show collections > d ...
- C语言二维数组作为函数参数
设有整型二维数组a[3][4]如下:0 1 2 34 5 6 78 9 10 11 它的定义为: int a[3][4]={{0,1,2,3},{4,5,6,7} ...
- OC 导入类 #import和@class 区别
objective-c中#import和@class的区别 在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forwar ...
- Kruskal与Prim
一.最小生成树 在无向图中,连通且不含圈的图称为树(Tree).给定无向图G=(V,E),连接G中所有点,且边集是E的子集的树称为G的生成树(Spanning Tree),而权值最小的生成树称为最小生 ...
- C01 C语言基础
目录 C语言简史及特点 C语言开发环境 C语言程序结构 C语言基本输入输出函数 编译 软件类型 C语言简要及特点 什么是计算机语言 计算机语言是用于人与计算机之间通讯的语言. 计算机遵照接收到的计算机 ...
- Bootstrap历练实例:表单帮助文件
Bootstrap表单控件可以在输入框input上有一个块级帮助文本,为了添加一个占用整个宽度的内容块,请在input后添加help-block. 实例: <!DOCTYPE html>& ...
- 实体类和JSON对象之间相互转化
. [代码]工具类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3 ...
- ViewController的lifecycle和autolayout
- [LUOGU] P2196 挖地雷
题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处 ...
- MySQL中的字符串
MySQL的字符串是从1开始编号的,这与计算机编程语言有所不同,在MySQL中1代表第一个字符,-1代表最后一个字符,以此类推. MySQL中百分号“%”代表的是任意个字符,下划线“_”代表的是任意一 ...