当前位置: 代码迷 >> 综合 >> Lougu P1047 & SSL1044 校门外的树【离散化】
  详细解决方案

Lougu P1047 & SSL1044 校门外的树【离散化】

热度:81   发布时间:2024-01-30 20:08:45.0

在这里插入图片描述
这道题是一道经典的离散化题(当然可以暴力/线段树)。
我们首先对输入的 l l r r 进行离散化,然后排序
再枚举每段离散后的区间,如果属于可修地铁的地方就用马路总长减去此区间 + 1 +1
注意重复的边界。
注意输出加一(0也算)。

具体:

看代码

#include<algorithm> 
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int s,n,l[10010],r[10010];
int lsh[10010];
int main()
{cin>>s>>n;for(int i=1; i<=n; i++){cin>>l[i]>>r[i];lsh[i]=r[i];   //离散化lsh[i+n]=l[i];}int b=-1;sort(lsh+1,lsh+1+2*n);for(int i=2; i<=2*n; i++)for(int j=1; j<=n; j++){if(lsh[i]>l[j]&&lsh[i]<=r[j])   //判断是否属于可修地铁的地方{s=s-(lsh[i]-lsh[i-1])-1;if(lsh[i-1]==b)s++;b=lsh[i];break;}}cout<<s+1;return 0;
}