题意略去。

考虑给定的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的更多相关文章

  1. 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 ...

  2. BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛

    1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 346  Solved: 184 ...

  3. BZOJ 1635: [Usaco2007 Jan]Tallest Cow 最高的牛

    题目 1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MB Description FJ's N ( ...

  4. 1635: [Usaco2007 Jan]Tallest Cow 最高的牛

    1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 383  Solved: 211 ...

  5. 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 ...

  6. 洛谷P2879 [USACO07JAN]区间统计Tallest Cow

    To 洛谷.2879 区间统计 题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. ...

  7. bzoj1635 / P2879 [USACO07JAN]区间统计Tallest Cow

    P2879 [USACO07JAN]区间统计Tallest Cow 差分 对于每个限制$(l,r)$,我们建立一个差分数组$a[i]$ 使$a[l+1]--,a[r]++$,表示$(l,r)$区间内的 ...

  8. 【BZOJ】1635: [Usaco2007 Jan]Tallest Cow 最高的牛(差分序列)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1635 差分序列是个好东西啊....很多地方都用了啊,,, 线性的进行区间操作orz 有题可知 h[a ...

  9. 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 ...

随机推荐

  1. java 笔记(5) —— 线程,yield,join

    一.线程各个状态与转换: 新建状态:用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存 .就绪状态:当一个线程创建了以后,其他的线程调用了它的start() ...

  2. eclipse Project facet Java version 1.8 is not supported.

    在移植eclipse项目时,如果遇到 “Project facet Java version 1.7 is not supported.” 项目中的jdk1.7不支持.说明项目是其他版本jdk编译的, ...

  3. objective-c底层: runtime机制

    runtime是oc的真面目.oc底层的一套c语言API. unsigned int count; //获取属性列表 objc_property_t *propertyList = class_cop ...

  4. Lintcode: Maximum Subarray III

    Given an array of integers and a number k, find k non-overlapping subarrays which have the largest s ...

  5. PHP 小谈静态用法

    1.静态的表现形式,在PHP中定义一个静态变量需要加入一个关键字——static,静态对象是属于类的,非静态对象是属于对象的 class Fenbi { public $changdu;//属于对象的 ...

  6. 树形DP+贪心(乱搞)(HDU4714)

    题意:给出一个树形图,要求把该树形成一个环最少的步骤(断开一条边和形成一条边都需一步) 分析:很明显,要想把树形成一个环,就要先把其分裂成m条子链之后把子链形成环需要的步骤是2*m+1,所以只需要m最 ...

  7. oracle 内外连接,左连接,右连接 区别

    首先讲解一下 on 与where后面接的条件的区别 on和where条件的区别如下:1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录.2.where条件是在 ...

  8. BeanFactory

            Spring容器,最基本的接口就是BeanFactory 负责创建,配置,管理bean 它有一个子接口ApplicationContext并将功能扩展.         理论上bean ...

  9. linux kernel.shmall shemax shemin 參數解釋

    分类: oracle linux 2010-06-17 14:30 6193人阅读 评论(0) 收藏 举报 linuxoracleredhat数据库服务器x86 Linux X86-64操作系统,Or ...

  10. const C语言(转)

    const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修饰局部变量.例:void fun ...