poj3263 Tallest Cow
题意略去。
考虑给定的R对pair(A, B)。
即A能看见B,这意味着B不比A低,并且区间内部的所有元素的高度严格小于A的高度。
我们规定区间的方向:若A > B,为反方向,反之称为正方向。
容易发现,区间在同一方向上不交叉,即要么相离,要么相互包含。
在相反反方向上,若两区间不相互包含,必定是有且仅有一个公共区间端点。
首先将所有idx上的高度默认设置为H。
对于相离的区间,他们之间的计算是独立的。
考虑相互包含的区间,先考虑范围最大的那个区间,处理之间闭区间[A,B]上的高度是相同的,满足此条件只需令(A,B)区间内元素自减一。
递归考虑其包含的区间,显然这样的做法是最优的且合法的。
实际上这与考虑区间的次序无关。
即每得到一个区间,对开区间内的元素减一即可。
可以用线段树来做区间的修改操作。
http://poj.org/problem?id=3263
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
const int maxn = 1e4 + ;
set< pair<int, int> > S;
struct Seg{
int l, r, h;
int lazy;
}seg[maxn << ];
int n, m, I, H; void build(int u, int l, int r){
seg[u].l = l;
seg[u].r = r;
seg[u].lazy = ;
seg[u].h = H;
if(r - l < ) return;
int mid = (l + r) >> ;
build(u << , l, mid);
build(u << | , mid, r);
} void push_down(int u){
if(seg[u].lazy > && seg[u].r - seg[u].l > ){
int mid = (seg[u].l + seg[u].r) >> ;
seg[u << ].lazy += seg[u].lazy;
seg[u << | ].lazy += seg[u].lazy;
seg[u << ].h -= seg[u].lazy;
seg[u << | ].h -= seg[u].lazy;
seg[u].lazy = ;
}
} void update(int u, int l, int r, int L, int R){
if(R - L < ) return;
if(L == l && r == R){
seg[u].lazy++;
seg[u].h--;
return;
}
push_down(u);
int mid = (l + r) >> ;
if(R <= mid) update(u << , l, mid, L, R);
else if(L >= mid) update(u << | , mid, r, L, R);
else{
update(u << , l, mid, L, mid);
update(u << | , mid, r, mid, R);
}
} void query(int u, int l, int r){
if(r - l == ){
printf("%d\n", seg[u].h);
return;
}
push_down(u);
int mid = (l + r) >> ;
query(u << , l, mid);
query(u << | , mid, r);
} int main(){
while(~scanf("%d%d%d%d", &n, &I, &H, &m)){
build(, , n + );
S.clear();
for(int i = , u, v; i < m; i++){
scanf("%d%d", &u, &v);
if(u == v || S.find(make_pair(u, v)) != S.end()) continue;
S.insert(make_pair(u, v));
if(u > v) swap(u, v);
update(, , n + , u + , v);
}
query(, , n + );
}
return ;
}
poj3263 Tallest Cow的更多相关文章
- POJ3263 Tallest Cow 差分
题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a p ...
- BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛
1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 346 Solved: 184 ...
- BZOJ 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
题目 1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec Memory Limit: 64 MB Description FJ's N ( ...
- 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 383 Solved: 211 ...
- Tallest Cow POJ - 3263 (区间点修改)
FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positi ...
- 洛谷P2879 [USACO07JAN]区间统计Tallest Cow
To 洛谷.2879 区间统计 题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. ...
- bzoj1635 / P2879 [USACO07JAN]区间统计Tallest Cow
P2879 [USACO07JAN]区间统计Tallest Cow 差分 对于每个限制$(l,r)$,我们建立一个差分数组$a[i]$ 使$a[l+1]--,a[r]++$,表示$(l,r)$区间内的 ...
- 【BZOJ】1635: [Usaco2007 Jan]Tallest Cow 最高的牛(差分序列)
http://www.lydsy.com/JudgeOnline/problem.php?id=1635 差分序列是个好东西啊....很多地方都用了啊,,, 线性的进行区间操作orz 有题可知 h[a ...
- bzoj 1635: [Usaco2007 Jan]Tallest Cow 最高的牛——差分
Description FJ's N (1 <= N <= 10,000) cows conveniently indexed 1..N are standing in a line. E ...
随机推荐
- git提交
1.git pull 本地已经commit 2.git checkout master 3.git pull 4.git checkout - 5.git merge master 6.git pus ...
- 解决多线程调用sql存储过程问题
场景: 我们程序现在改成多线程了,我现在需要把临时表中的数据给插入到TABLE_M中,但这时候可能其他的线程也在插入,我就不能用之前我们的方案了(select max(oid) from Tuning ...
- CentOS 5.5 Nginx+JDK+MySQL+Tomcat(jsp)成功安装案例
在CentOS 5.5中安装Nginx+jdk+mysql+tomcat是非常容易的.只需yum安装环境包和nginx.解压安装jdk和tomcat.配置profile文件.server.xml和ng ...
- [CentOS] 使用gitolite搭建git服务端
1. 创建用户 #创建gitadmin用户 useradd gitadmin #设置gitadmin密码 passwd gitadmin #创建git用户 useradd git #设置git密码 p ...
- OpenGL笔试题
简述FrameBuffer,RenderBuffer,Depth Buffer,Framebuffer attachment,Stencil buffer的关系 简述利用OpenGL执行图像叠加(大P ...
- 《OpenGL着色语言》理解点记录二
别人提到“OpenGL的处理管线”时,意味着什么? 准确的讲,应该是“OpenGL图形处理管线”,“管线”带有特定的顺序,在OpenGL中就是Graphics Processing Pipeline. ...
- Floyd算法核心代码证明
Flody 大家都知道这个最终模版: for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i ...
- sql如何将同个字段不同值打印在一行
group_concat(distinct(img)) group by id通过id分组把img的值打印在一行group_concat()通常和group by一起使用,功能是把某个字段的值打印在一 ...
- VMWare联网
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式). 如果你想利用VMWare在局域网中新建一个独立的虚拟服务器,为局域网用 ...
- Linux USB摄像头驱动【转】
本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...