描述 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. Codeforces Round #332 (Div. 2) B. Spongebob and Joke 模拟

    B. Spongebob and Joke     While Patrick was gone shopping, Spongebob decided to play a little trick ...

  2. C# 文件的一些基本操作(转)//用C#读写ini配置文件

    C# 文件的一些基本操作 2009-07-19  来自:博客园  字体大小:[大 中 小] 摘要:介绍C#对文件的一些基本操作,读写等. using System;using System.IO;us ...

  3. hdoj--1418--抱歉(水题)

     抱歉 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  4. leetcode String相关

    目录 3无重复字符的最长子串 5最长回文子串 8字符串转换整数(atoi), 9回文数,7整数反转 28实现strStr(), 459重复的子字符串(KMP) 43字符串相乘 71简化路径 93复原I ...

  5. HDU1043 Eight

    题目: 简单介绍一下八数码问题:        在一个3×3的九宫格上,填有1~8八个数字,空余一个位置,例如下图: 1 2 3 4 5 6 7 8           在上图中,由于右下角位置是空的 ...

  6. ACM_Exponentiation

    Exponentiation Time Limit: 2000/1000ms (Java/Others) Problem Description: Problems involving the com ...

  7. javascript事件绑定1-模拟jquery可爱的东西

    1.给对象添加事件attachEvent(兼容IE,不兼容ff.chrome) <html xmlns="http://www.w3.org/1999/xhtml"> ...

  8. 拖入浏览器读取文件demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Unity引擎GUI之Text

    Text 文本 要显示的字符串. Font 字体 Font Style 加粗与倾斜 Font Size 字体大小 Line Spacing 行距,文本行之间的间距 Rich Text 勾选后,想要单独 ...

  10. dubbo之线程模型

    事件处理线程说明 如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,比如只是在内存中记个标识,则直接在IO线程上处理更快,因为减少了线程池调度. 但如果事件处理逻辑较慢,或者需要发起新的IO请求 ...