计蒜客习题 学校的宣传板 离散化裸题

题意就是给你一个高长固定的模板 从先到后向n个区域贴广告纸

后面的会覆盖前面的 问你能看见多少个 看见一个小边也算

那么这题我们怎么看呢

数据长会很大 但是我们发现最多用2e4个 所以离散化 离散化之后按题意从后往前找有没有被覆盖的广告版就行了

注意是从后往前

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
const int MAX_N = 10005;
int n,w;
struct node {
    int x;
    int y;
}num[MAX_N];
map<int ,int > mp;
int tp[MAX_N*2],vis[MAX_N*2];
int main(){
    scanf("%d%d",&n,&w);
    for(int i=0;i<n;++i){
        scanf("%d%d",&num[i].x,&num[i].y);
        tp[i*2] = num[i].x;
        tp[i*2+1] = num[i].y;
    }
    sort(tp,tp+n*2);
    int m = unique(tp,tp+n*2)-tp;
    for(int i=0;i<m;++i){
        mp[tp[i]]=i+1;
    }
    int ans = n;
    for(int i=n-1;i>=0;i--){
        num[i].x=mp[num[i].x];
        num[i].y=mp[num[i].y];
        int num_ = 0;
        for(int j = num[i].x;j<=num[i].y;j++){
            if(vis[j]==1) {
                num_++;
               // dbg(num_);
            }
            else vis[j] = 1;
            if(num_ == num[i].y-num[i].x+1){
                //dbg(num[i].y-num[i].x+1);
                ans--;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值