POJ3263 Tallest Cow 差分

本文详细解析了POJ 3263题目的差分算法解决方案,通过初始化数组并利用差分技巧,实现区间操作的高效处理。文章提供了完整的AC代码示例,适用于算法竞赛及数据结构学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

http://poj.org/problem?id=3263

分析

差分,初始数组中元素均为 000,对于每个 (A,B)(A, B)(A,B),将 A+1A + 1A+1 位置 −1- 11,将 BBB 位置 +1+ 1+1,表示区间 [A+1,B−1][A + 1, B - 1][A+1,B1] 每个位置均 −1- 11,差分数组中最终每个位置的前缀和 +H+ H+H 即为答案,注意可能有重复的 (A,B)(A, B)(A,B)

AC代码

#include <cstdio>
#include <iostream>
#include <map>

using namespace std;

inline int read() {
	int num = 0;
	char c = getchar();
	while (c < '0' || c > '9') c = getchar();
	while (c >= '0' && c <= '9')
		num = num * 10 + c - '0', c = getchar();
	return num;
}

const int maxn = 1e4 + 5;

int n, r, a[maxn];
map<pair<int, int>, bool> vis;

int main() {
	n = read(), read(), a[0] = read(), r = read();
	for (int i = 1; i <= r; ++i) {
		int x = read(), y = read();
		if (x > y) swap(x, y);
		if (vis[make_pair(x, y)]) continue;
		vis[make_pair(x, y)] = 1;
		--a[x + 1], ++a[y];
	}
	for (int i = 1; i <= n; ++i) {
		a[i] += a[i - 1];
		printf("%d\n", a[i]);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值