P3467(矩形覆盖问题)

Posted iss-ue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3467(矩形覆盖问题)相关的知识,希望对你有一定的参考价值。

描述:https://www.luogu.com.cn/problem/P3467


1.考虑如果整个建筑物链是等高的,一张高为链高,宽为整个建筑物宽的海报即可完全覆盖;

2.若有两个不等高的元素组成建筑物链,那么一定需要两张;

3.因为题目要求海报不可超出建筑物链,那么我们即可用单调栈维护:初始海报数为建筑物数,入栈建筑物链的高度序列,当栈顶大于即将入栈元素时弹栈,若最后弹栈元素与即将入栈元素等高,需要的海报数-1;

4.易证明本方法是正确的:当有两个处于一个峰两侧的等高块时,他们可以用一张海报覆盖,所需海报数显然可减少一个;

#include <bits/stdc++.h>
using namespace std;
int n,a[250009],b[250009];
int q[250009],p[250009];
map<int,int>m;
int ans;
int main()
{
    cin>>n;
    int ans=0;
    for(int i=1;i<=n;i++)
        cin>>a[i]>>b[i];
    int tail=0,head=1;
    for(int i=1;i<=n;i++)
    {
        while(tail>=head&&q[tail]>=b[i])
        {
            if(q[tail]==b[i])    ans++;
            tail--;
        }
        q[++tail]=b[i],p[tail]=i;
    }
    cout<<n-ans;
}

 

以上是关于P3467(矩形覆盖问题)的主要内容,如果未能解决你的问题,请参考以下文章

丑陋的片段过渡到带有覆盖的surfaceview

洛谷 P3467 [POI2008]PLA-Postering

小矩形覆盖大矩形问题

小矩形覆盖大矩形问题

矩形覆盖

n个2*1小矩形无重叠覆盖2*n大矩形(递归,思路分析及代码实现,斐波那契数列衍生)