描述 Description
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

 
 
 
 
输入格式 InputFormat
输入的第一行有两个整数L(1 <= L <= 1亿)和 M(1 <= M <= 20000),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

 
 
 
 
输出格式 OutputFormat
输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
 
样例输入 SampleInput

500 3
150 300
100 200
470 471

样例输出 SampleOutput

298

  昨天的排位赛又掉进大坑里面了,然后将题解的时候马哥说有兴趣的话可以去看一下校门口的树1 2 3。然后目前看了1和2,题意基本相同,但是1的数据量很小,直接模拟即可,2的数据量有点大,范围最大可以到一亿,这里一开始想试一下离散化+树状数组,结果发现离散化以后不知道怎样用树状数组了,然后又想起自己之前一直不敢做这种题,于是就试了一下快排+扫描,结果还真过了→_→,基础知识捉急啊(┬_┬) 。

  记录一下想法吧,逼近之前一直觉得这是什么大难题,其实只是当时没有动脑子(┬_┬) 。

  先对区间排个序,要求如果左端点小的就排在前面,如果左端点相等的话就根据右端点大的排前面。

  然后从左向右扫描,用一个变量rr记录当前访问的所有线段里面我们遇到过的最大的右端点是多少,然后每一次访问新的线段的时候就新线段的左端点和r比较一下,如果比rr大就说明新线段前面有一段(rr,新线段)没有被覆盖。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>
#define MAX 20002
using namespace std; typedef struct Seg{
int l,r; bool operator < (const Seg& o)const{
return l==o.l ? r>o.r: l<o.l ;
}
}Seg; Seg v[MAX];
int L,m; int main()
{
ios::sync_with_stdio(false);
//freopen("data.txt","r",stdin);
int sum;
while(cin>>L>>m){
for(int i=;i<m;i++){
cin>>v[i].l>>v[i].r;
if(v[i].l>v[i].r) swap(v[i].l,v[i].r);
}
sort(v,v+m);
sum=v[].l-;
int rr=v[].r;
for(int i=;i<m;i++){
if(v[i].l>rr) sum+=v[i].l-rr-;
rr = max(rr,v[i].r);
}
sum+=L-rr;
cout<<sum<<endl;
}
return ;
}
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>
#define MAX 20002
using namespace std; typedef struct Seg{
int l,r; bool operator < (const Seg& o)const{
return l==o.l ? r>o.r: l<o.l ;
}
}Seg; Seg v[MAX];
int L,m; int main()
{
ios::sync_with_stdio(false);
//freopen("data.txt","r",stdin);
int sum;
while(cin>>L>>m){
for(int i=;i<m;i++){
cin>>v[i].l>>v[i].r;
if(v[i].l>v[i].r) swap(v[i].l,v[i].r);
}
sort(v,v+m);
sum=v[].l-;
int rr=v[].r;
for(int i=;i<m;i++){
if(v[i].l>rr) sum+=v[i].l-rr-;
rr = max(rr,v[i].r);
}
sum+=L-rr;
cout<<sum<<endl;
}
return ;
}

1286

Tyvj - 1286 - 校门外的树2的更多相关文章

  1. P1047 校门外的树

    P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...

  2. Vijos1448校门外的树 题解

    Vijos1448校门外的树 题解 描述: 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现 ...

  3. OpenJudge计算概论-校门外的树

    /*======================================================================== 校门外的树 总时间限制: 1000ms 内存限制: ...

  4. [swustoj 764] 校门外的树 Plus Plus

    校门外的树 Plus Plus(0764) 问题描述 西南某科技大学的校门外长度为 L 的公路上有一排树,每两棵相邻的树之间的间隔都是 1 米.我们可以把马路看成一个数轴,马路的一端在数轴 1 的位置 ...

  5. 校门外的树 - Grids2808

    校门外的树 问题描述: 某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米.我们 可以把马路看成一个数轴,马路的一端在数轴0 的位置,另一端在L 的位置:数轴上的每 个整数点, ...

  6. 校门外的树 OpenJudge 1.6.06

    06:校门外的树 总时间限制:  1000ms 内存限制:  65536kB 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0 ...

  7. 【解题报告】VijosP1448校门外的树(困难版)

    原题: 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的--如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作:K=1,K=1,读入l.r ...

  8. Vijos P1103 校门外的树【线段树,模拟】

    校门外的树 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……, ...

  9. Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】

    校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...

随机推荐

  1. Caused by: java.lang.UnsatisfiedLinkError: Couldn&#39;t load BaiduMapVOS_v2_1_3: findLibrary returned nu

    在使用百度地图进行开发的时候.假设遇到了 Caused by: java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapVOS_v2_1_3: fi ...

  2. bzoj1898: [Zjoi2005]Swamp 沼泽鳄鱼

    一眼矩乘 把图分成12个,然后直接搞. #include<cstdio> #include<iostream> #include<cstring> #include ...

  3. null in JavaScript

    C# String.IsNullOrEmpty Javascript equivalent https://stackoverflow.com/questions/5746947/c-sharp-st ...

  4. 687C

    dp 以前做过 忘了. 想破脑袋不知道怎么设状态 dp[i][j][k]表示选到第i个硬币,当前和为j,能否弄出k dp[i][j][k]|=dp[i-1][j][k]|dp[i-1][j][k-c[ ...

  5. Java常用类及反射,类加载

    1.系统相关类 Java提供了System类和Runtime类来与程序运行的平台进行交互 A.System类代表当前Java程序的运行平台 a. System类是一个final类,该类的所有属性和方法 ...

  6. 最短路径问题(floyd)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1867 #include<stdio.h& ...

  7. 原生JS---8

    原生js学习笔记8——Ajax基础   什么是Ajax 不刷新页面的情况下从服务器获取.提交数据的一种数据交互方式. Ajax使用步骤 1.创建Ajax对象 var httpRequest = new ...

  8. Python 31 TCP协议 、socket套接字

    1.TCP协议 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割. (1)三次握手建链接( ...

  9. css 画箭头

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. Servlet初始化与异步支持

    Shared libraries(共享库) / runtimes pluggability(运行时插件能力) 1.Servlet容器启动会扫描,当前应用里面每一个jar包的 ServletContai ...