181. [USACO Jan07] 最高的牛

★★   输入文件:tallest.in   输出文件:tallest.out   简单对比
时间限制:1 s   内存限制:32 MB

FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are told only the height H (1 ≤ H ≤ 1,000,000) of the tallest cow along with the index I of that cow.

FJ has made a list of R (0 ≤ R ≤ 10,000) lines of the form "cow 17 sees cow 34". This means that cow 34 is at least as tall as cow 17, and that every cow between 17 and 34 has a height that is strictly smaller than that of cow 17.

For each cow from 1..N, determine its maximum possible height, such that all of the information given is still correct. It is guaranteed that it is possible to satisfy all the constraints.

为了方便我们把FJ养的N头(1 ≤ N ≤ 10,000)奶牛从1号开始编号,一直编到N号,并且让他们站成一列。每头牛都有一个正整数用来描述她的身高(有些牛不愿意说,她们的身高保密)。你只知道这些牛中最高的那一头的身高是H,她的编号是第I号。

FJ写了一张单子,上面有R个陈述句,大概是”第17号牛可以看见第34号牛”这种。这意味着第34号牛最起码和第17号牛一样高。而且17号牛和34号牛之间的牛得身高都严格的小于min(H[17],H[34])。

从第1号牛到第N号牛,求她们可能拥有的最大身高,所给出的所有信息都是正确的。这可以保证满足所有条件。

Input

  • Line 1: Four space-separated integers: N, I, H and R
  • Lines 2..R + 1: Two distinct space-separated integers A and B (1 ≤ A, B ≤ N), indicating that cow A can see cow B.

输入:

第1行:四个由空格分开的整数,N,I,H和R。

第2..R+1行:两个由空格分开的整数A和B(1 ≤ A, B ≤ N),表示第A号牛可以看到第B号牛。

Output

  • Lines 1..N: Line i contains the maximum possible height of cow i.

输出:

第1..N行:第i行包括第i号牛可能拥有的最大身高。

Sample Input

9 3 5 5
1 3
5 3
4 3
3 7
9 8

Sample Output

5
4
5
3
4
4
5
5
5

Input Details

There are 9 cows, and the 3rd is the tallest with height 5.

输入细节:

由9头奶牛,第三头奶牛最高,身高是5.

译byKZFFFFFFFF

思路:线段树。

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 10000
using namespace std;
map<int,int>ma[MAXN];
struct nond{
int l,r,flag;
}tree[MAXN*];
long long n,I,H,R;
void build(int now,int l,int r){
tree[now].l=l;tree[now].flag=;
tree[now].r=r;
if(tree[now].l==tree[now].r)
return ;
long long mid=(tree[now].l+tree[now].r)/;
build(now*,l,mid);
build(now*+,mid+,r);
}
void down(int now){
tree[now*].flag+=tree[now].flag;
tree[now*+].flag+=tree[now].flag;
tree[now].flag=;
}
void change(int now,int l,int r){
if(tree[now].l==l&&tree[now].r==r){
tree[now].flag+=;
return ;
}
if(tree[now].flag) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) change(now*,l,r);
else if(l>mid) change(now*+,l,r);
else{
change(now*,l,mid);
change(now*+,mid+,r);
}
}
int query(int now,int x){
if(tree[now].l==tree[now].r)
return tree[now].flag;
if(tree[now].flag) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(x<=mid) return query(now*,x);
else if(x>mid) return query(now*+,x);
}
int main(){
//freopen("tallest.in","r",stdin);
//freopen("tallest.out","w",stdout);
while(scanf("%lld%lld%lld%lld",&n,&I,&H,&R)!=EOF){
build(,,n);
for(int i=;i<=R;i++){
long long a,b;
scanf("%lld%lld",&a,&b);
if(a>b) swap(a,b);
if(ma[a][b]) continue;
ma[a][b]=;
if(a+==b) continue;
change(,a+,b-);
}
for(long long i=;i<=n;i++)
cout<<H-query(,i)<<endl;
}
}

一直调不对的20分代码

AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<limits.h>
using namespace std;
const int maxn=+;
int LL[maxn],RR[maxn];
long long N,H,R,I;
long long add[maxn<<],ans[maxn];
struct node{
int l,r;
int sum;
}t[maxn<<];
void pushdown(int rs)//向下更新lazy积累的值
{
if(add[rs])
{
add[rs<<]+=add[rs];
add[rs<<|]+=add[rs];
add[rs]=;
}
}
void build(int rs,int l,int r)
{
t[rs].l=l;
t[rs].r=r;
add[rs]=;
if(l==r)
{
t[rs].sum=H;
return ;
}
int mid=(l+r)>>;
build(rs<<,l,mid);
build(rs<<|,mid+,r);
}
void update(int l,int r,int rs)//更新操作
{
if(t[rs].l>=l&&t[rs].r<=r)
{
add[rs]+=;
return ;
}
pushdown(rs);
int mid=(t[rs].l+t[rs].r)>>;
if(l<=mid) update(l,r,rs<<);
if(r>mid) update(l,r,rs<<|);
}
int query(int k,int rs)
{
if(t[rs].l==t[rs].r)
{
return t[rs].sum-=add[rs];
}
pushdown(rs);
int mid=(t[rs].l+t[rs].r)>>;
if(k<=mid) return query(k,rs<<);
else return query(k,rs<<|);
}
int main()
{
freopen("tallest.in","r",stdin);
freopen("tallest.out","w",stdout);
int u,v;
scanf("%I64d%I64d%I64d%I64d",&N,&I,&H,&R);
build(,,N);
int k=;
while(R--)
{
scanf("%d%d",&u,&v);
if(u>v) swap(u,v);
int flag=;
for(int i=;i<k;i++)//判断重边,在poj做题一定要防这东西
{
if(u==LL[i]&&v==RR[i])
{
flag=;
break;
}
}
if(!flag)
continue;
LL[k]=u;RR[k]=v;
k++;
if(v-u==)//相邻的话就不用更新了
continue; update(u+,v-,);//注意是开区间的值更新
}
for(int i=;i<=N;i++)
ans[i]=query(i,);
for(int i=;i<=N;i++)
printf("%I64d\n",ans[i]);
return ;
}

cogs 181. [USACO Jan07] 最高的牛的更多相关文章

  1. cogs 182. [USACO Jan07] 均衡队形 线段树

    182. [USACO Jan07] 均衡队形 ★★☆   输入文件:lineup.in   输出文件:lineup.out   简单对比时间限制:4 s   内存限制:128 MB 题目描述 农夫约 ...

  2. COGS 182. [USACO Jan07] 均衡队形

    ★★   输入文件:lineup.in   输出文件:lineup.out   简单对比时间限制:4 s   内存限制:128 MB 题目描述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛 ...

  3. COGS 163 [USACO Mat07] 牛语

    COGS 163 [USACO Mat07] 牛语 输入文件:latin.in   输出文件:latin.out   简单对比 时间限制:1 s   内存限制:128 MB 奶牛们听说猪发明了一种秘密 ...

  4. COGS182 [USACO Jan07] 均衡队形[RMQ]

    182. [USACO Jan07] 均衡队形 ★★   输入文件:lineup.in   输出文件:lineup.out   简单对比时间限制:4 s   内存限制:128 MB 题目描述 农夫约翰 ...

  5. RMQ——[USACO Jan07] 均衡队形题解

    题目:[USACO Jan07] 均衡队形 描述: 题目描述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛,每天挤奶时总会按同样的顺序站好.一日,农夫约翰决定为奶牛们举行一个“终极飞盘”比 ...

  6. 177. [USACO Jan07] 有限制的素数

    177. [USACO Jan07] ★   输入文件:qprime.in   输出文件:qprime.out   简单对比 时间限制:1 s   内存限制:128 MB Farmer John 开始 ...

  7. Cogs 1435. [USACO NOV]金发姑娘和N头牛

    1435. [USACO NOV]金发姑娘和N头牛 ★★☆   输入文件:milktemp.in   输出文件:milktemp.out   简单对比时间限制:1 s   内存限制:256 MB [题 ...

  8. COGS 133. [USACO Mar08] 牛跑步

    ★★★   输入文件:cowjog.in   输出文件:cowjog.out   简单对比时间限制:1 s   内存限制:128 MB Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她 ...

  9. Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd

    题目:http://cojs.tk/cogs/problem/problem.php?pid=309 309. [USACO 3.2] 香甜的黄油 ★★   输入文件:butter.in   输出文件 ...

随机推荐

  1. [洛谷P3391]【模板】文艺平衡树(Splay)

    题目大意:给定一个$1\sim n$的序列,每次翻转一个区间,输出最后的序列. 解题思路:Splay的区间翻转操作.我借此打了个Splay的模板(运用内存池,但有些功能不确定正确,例如单点插入). 大 ...

  2. [洛谷P3697]开心派对小火车

    题目:洛谷P3697 题目大意是有各站停列车(慢车,相邻2站时间A)和特急列车(相邻2站时间B),特急列车在特定站点停靠. 现在加一种快速列车(相邻2站时间C,A>C>B),停靠K站(包括 ...

  3. WIN10 java环境变量问题之 配置的JDK1.8版本却是1.7

    问题前沿,在开发项目中,发布的项目出现了内存溢出问题,我挨个把代码看了一遍,并不能准确定位到那个地方能出现内存溢出问题,后来想到使用压力测试,较可能出现内存溢出的接口进行一番测试. 我就安装了一个ap ...

  4. python3使用selenium3的坑

    网络看了很多的文章,大部分都是不完整, 还有很多误导性极强的教程 ,特别是chromedriver这东西.简直一堆坑. 一首先是安装python3.6.5 root@ubuntu:~# add-apt ...

  5. JS数组中的indexOf方法

    前言 这两天在家中帮朋友做项目,项目中使用了数组的indexOf 方法,找到了一篇文章,感觉非常不错,顺便整理下以防链接丢失. 相信说到 indexOf 大家并不陌生,判断字符串是否包涵子字符串时特别 ...

  6. [POJ3233]Matrix Power Series 分治+矩阵

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [POJ3233]Matrix Power Series 分治+矩阵 题目大意 A为n×n(n<= ...

  7. com.alibaba.fastjson.JSONPathException: expect '], but 'y'

    今天遇到这样的一个错误 网上查找了各种资料,终于找到了报错的原因: String dataType = (String) JSONPath.eval(dataset.getSchema(), &quo ...

  8. HDU 4165

    一块药看成括号配对就行了.很明显的直接求卡特兰数. 今晚看了HDU 3240的题,有一点思路,但无情的TLE.想不到什么好方法了,看了别人的解答,哇...简直是天才的做法啊....留到星期六自己思考一 ...

  9. Chrome插件Axure RP Extension

    Chrome插件Axure RP Extension 1.将文件夹“0.6.2_0”复制到Chrome文件夹中某个位置. 2.打开Chrome,打开[设置] - [扩展程序],勾选右上角的“开发者模式 ...

  10. bzoj1202: [HNOI2005]狡猾的商人(差分约束)

    1202: [HNOI2005]狡猾的商人 题目:传送门 题解: 据说是带权并查集!蒟蒻不会啊!!! 可是听说lxj大佬用差分约束A了,于是开始一通乱搞. 设s[i]为前i个月的总收益,那么很容易就可 ...