Tallest Cow,题解
Posted wish-all-ac
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tallest Cow,题解相关的知识,希望对你有一定的参考价值。
题目链接
题意:
问满足一系列形如ab可以相互看到的约束的所有奶牛的最大身高(最高的编号和高度已给出)
分析:
首先,这个可以互相看到指的是中间的人比两头的都矮,一条斜线看到的不行,那么其实我们就可以直接默认每个牛都是最高的,然后有一个约束给中间的牛矮一些,最后找到处理后的数据就好了,数据处理方式:线段树or差分,当然这一题差分更快一些。
然后还有一个问题,就是他还要求b的身高大于等于a的,其实这个和没有一样,因为我们要求的是最大,能不变矮尽量不变,又因为如果有新的约束那么要不完全在a,b之内,要不完全在a,b之外(否则不可能),a,b就有同时改变了。
然后就是注意去一下重,即两个相同的约束不会使中间的身高改变2或以上(如果用这种方法计算最大)
最后就是代码。
#include <cstdio> #include <algorithm> #include <map> using namespace std; const int maxn=10000+10; int c[maxn]; map<pair<int,int>,bool> ma; int main(){ int n,s,h,m; scanf("%d%d%d%d",&n,&s,&h,&m); c[0]=h; int js1,js2; for(int i=1;i<=m;i++){ scanf("%d%d",&js1,&js2); if(js1>js2) swap(js1,js2); if(ma[make_pair(js1,js2)]) continue; c[js1+1]--; c[js2]++; ma[make_pair(js1,js2)]=1; } for(int i=1;i<=n;i++){ c[i]=c[i-1]+c[i]; printf("%d ",c[i]); } return 0; }
以上是关于Tallest Cow,题解的主要内容,如果未能解决你的问题,请参考以下文章
洛谷 P2879 [USACO07JAN]区间统计Tallest Cow 题解
bzoj1635[Usaco2007 Jan]Tallest Cow 最高的牛*
洛谷 P2879 [USACO07JAN]区间统计Tallest Cow
P2879 [USACO07JAN]区间统计Tallest Cow {前缀和,思维}