前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[USACO07JAN]区间统计Tallest Cow 差分

[USACO07JAN]区间统计Tallest Cow 差分

作者头像
用户2965768
发布2019-04-18 14:14:17
3900
发布2019-04-18 14:14:17
举报
文章被收录于专栏:wymwym

FarmerJohn 有n头牛,它们按顺序排成一列。 FarmerJohn 只知道其中最高的奶牛的序号及它的高度,其他奶牛的高度都是未知的。现在 FarmerJohn 手上有RRR条信息,每条信息上有两头奶牛的序号(a和b),其中b奶牛的高度一定大于等于a奶牛的高度,且a,b之间的所有奶牛的高度都比a小。现在FarmerJohn想让你根据这些信息求出每一头奶牛的可能的最大的高度。(数据保证有解)

输入格式:

第1行:四个以空格分隔的整数:n,i,h和R(n和R意义见题面; i 和 h 表示第 i 头牛的高度为 h ,他是最高的奶牛)

接下来R行:两个不同的整数a和b(1 ≤ a,b ≤ n)

输出格式:

一共n行,表示每头奶牛的最大可能高度.

题解:

建差分数组,区间修改l,r类似线段树懒惰标记。注意去重边

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
int dif[10005];
map<pair<int,int>,bool> book;
int main()
{
	int h,n,r,i;
	int x,y;
	scanf("%d %d %d %d",&n,&i,&h,&r);
	while(r--){
		scanf("%d %d",&x,&y);
		if(x>y)swap(x,y);
		if(book[make_pair(x,y)])continue;
		book[make_pair(x,y)]=1;
		dif[x+1]--;
		dif[y]++;
	}
	for(i=1;i<=n;i++){
		dif[i]=dif[i-1]+dif[i];
		printf("%d\n",dif[i]+h);
	}
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入格式:
  • 输出格式:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档