线段树区间更新 + 离散化 -- Mayor's posters POJ - 2528
Mayor’s posters POJ - 2528 题意: n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围li 、ri(1<=li<=ri<=10000000)。求出最后还能看见多少张海报。 思路: 线段树区间更新题,可以用懒人更新的思路优化,对于线段树来说10000000显然太大,数组开不了,而n只有10000,就可以离散化一下。 但是离散化对本题来说有一个问题(坑), 就是由于我们是紧紧挨着压缩的, 所以可能会存在错误覆盖的问题 例如对于数据 3 1 10 1 3 7 10 我们压缩过后应该就变为 1 4 1 2 3 4 可这样的话我们目测一下, 就只有2个区间可以看到了, 第一个被盖住了. 而真正的答案应该是3才对 这是我们应该在离散化数组c中存储时考虑将每次的右边界r+1也存入, 这样就可以有效避免错误覆盖的问题。 问题code: # include <iostream> # include <stdio.h> # include <algorithm> using namespace std ; const int maxn = 1e5 + 5 ; int st [ maxn * 4 ] , vis [ maxn * 2 ] , cnt [ maxn * 2 ] , a [ maxn * 2 ] ; int ans ; void pushdown (