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 ...
随机推荐
- 发现前端框架 bui-min.js
http://www.builive.com/apps/default/main.html#menu/code http://www.builive.com/demo/grid-plugin.php# ...
- php:PHPExcel导出excel表格
一.动态生成的内容如何能当成文件来下载呢? 方法:1.将Content-Type设置成application/octet-stream就可以了,即[header('Content-Type: appl ...
- 系统性能调优CPU与内存
CPU相关术语 处理器:插到系统插槽或者处理器版上的物理芯片,以核或者硬件线程的方式包含了一块或者多块CPU. 核:一颗多核处理器上的一个独立CPU实例.核的使用时处理器扩展的一种方式,有称为芯片级多 ...
- Linux MD5值递归比对目录中的文件是否有修改
项目上今天遇到检查两个版本的发布包rc1.tar.gz和rc2.tar.gz的一致性,解决方法做个总结,步骤如下 1. 建立文件夹 mkdir test_rc1 test_rc2 2. 文件解压缩 t ...
- Struts2的Action名称搜索顺序:2014.12.30
struts.xml配置: <struts> <package name="hw" namespace="/test" extends=&qu ...
- c++命名规则
命名规则根据不同公司有略微不同,这里按照google c++的编程标准1.文件名-全部用小写字母和下划线或横线组成,例如my_useful_class.ccmy-useful-class.ccmyus ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- 夺命雷公狗---node.js---19之项目的构建在node+express+mongo的博客项目4mongodb在项目中的基本引入
首先我们在命令行下先建立这个库: 然后我们在项目中引入mongodb的模块: var MongoClient = require('mongodb').MongoClient; var DB_STR ...
- webpack我遇到的一些坑
我的第一个用于实验webpack的项目是一个拥有多个版本的项目.什么叫多个版本?这个项目对3个语言版本+3个不同城市版本+(移动端 + PC端),也就是3*3*2,18个版本. 我的第一次想法肯定是 ...
- [php笔记]项目开发五个阶段/雇员管理系统
zend 公司,管理PHP版本的升级. 功能强大, 官方推荐. (开发一个PHP项目) 软件开发的五个阶段. 1.创建一个项目(工程)2.设置该项目的路径3.创建一个文件test.php ***使用Z ...