最高的牛(差分)
P2879 [USACO07JAN] Tallest Cow S
题目描述
FarmerJohn 有n头牛,它们按顺序排成一列。FarmerJohn 只知道其中最高的奶牛的序号及它的高度,其他奶牛的高度都是未知的。现在 FarmerJohn 手上有
输入格式
第一行:四个以空格分隔的整数:
接下来
输出格式
一共
输入输出样例 #1
输入 #1
9 3 5 5
1 3
5 3
4 3
3 7
9 8
输出 #1
5
4
5
3
4
4
5
5
5
说明/提示
分析
牛的高度只能是嵌套形式的,每给出一个区间,说明区间之间的牛都比两端的矮,由于求最大的的高度,那么假设所有牛都最高,出现区间,那么区间牛高度减少,这样本质就是差分,但是注意,出现相同的区间不能再减,所有使用set判重
代码
int height[10005],an[10005]; //差分数组和答案数组
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//
// freopen("E:/Code/C++/untitled1/input.txt","r",stdin);
// freopen("output.txt","w",stdout);
set< pair<int,int>> st;
int n,l,h,r;
cin >> n >> l >> h >> r;
height[1] = h;//相当于所有高度都加上h,初始化
for(int i = 1;i <= r;++i)
{
int a,b;
cin >> a >> b;
if(a > b) swap(a,b);
if(st.count({a,b})) continue; //判重
st.insert({a,b});
height[a+1]--; //注意差分写法,f[i]++,是对i及其之后的所有原数列进行操作
height[b+1-1]++; //在区间后的一个元素操作,恢复过多元素的操作
}
//height[0] = 0;
for(int i = 1;i <= n;++i)
{
an[i] = height[i] + an[i-1]; //数组回复
cout << an[i] << '\n';
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战