【贪心】[COCI]电话监测
第二题:Mirko的镇上有一条东西走向的长街,街上住了M户人。每一户的房子都有一个唯一的编号,从1到M。
一场暴风雨过后,这个小镇大部分的电话线都被弄断了。市长决定重建一个新的电话网络。Mirko对电话网的使用率很感兴趣,于是他在电话网络的某些地方安装了一些特殊的分析器。分析器可以分析经过它的电话,也就是说通话的双方如果一个在分析器的东边,一个在分析器的西边,则分析器就能监测到这个电话。
在第一个月的月末,Mirko移除了所有的分析器,现在他想知道在这个月里镇上的居民至少打了多少个电话。
输入数据:
第一行包含2个整数N表示分析器的数目,
接下来
在同一个位置不会放一个以上的分析器。
输出:
一个整数,表示最少的电话数。
输入样例1:
3 4
3 1
2 2
1 1
输出样例1:
2
输入样例2:
2 3
1 23
2 17
输出样例2:
23
输入样例3:
3 9
7 2
8 3
3 4
输出样例3:
5
分析一下可以发现如果当前
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int MAXN = 100000;
typedef pair<int, int> pii;
pii p[MAXN+10];
int mabs(int u){return u>0?u:-u;}
int main(){
int n, m, a, b;
scanf("%d%d", &n, &m);
for(int i=1;i<=n;i++){
scanf("%d%d", &a, &b);
p[i+1] = make_pair(a, b);
}
p[1] = make_pair(0, 0);
n += 2;
p[n] = make_pair(m+1, 0);
sort(p+1, p+1+n);
long long ans = 0;
for(int i=2;i<n;i++)
ans += p[i].second > p[i-1].second ? 1LL * p[i].second - p[i-1].second : 0;
cout<<ans<<endl;
return 0;
}