1. 程式人生 > >洛谷——P2082 區間覆蓋(加強版)

洛谷——P2082 區間覆蓋(加強版)

fine clu ace define bsp getc 數據 ans pan

P2082 區間覆蓋(加強版)

題目描述

已知有N個區間,每個區間的範圍是[si,ti],請求出區間覆蓋後的總長。

輸入輸出格式

輸入格式:

N s1 t1 s2 t2 …… sn tn

輸出格式:

共一行,一個正整數,為覆蓋後的區間總長。

輸入輸出樣例

輸入樣例#1: 復制
3
1 100000
200001 1000000
100000000 100000001
輸出樣例#1: 復制
900002

說明

【數據範圍】

對於40%的數據 N≤1000,0<Si<Ti≤10000

對於100%的數據 N≤10^5,0<Si<Ti≤10^17,且為整數

貪心

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 100010
#define LL long long
using namespace std;
LL n,l,r,ans;
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
    
while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar(); return x*f; } struct Node { LL x,y; }node[N]; int cmp(Node a,Node b) {return a.x<b.x;} int main() { n=read(); for(int i=1;i<=n;i++) node[i].x=read(),node[i].y=read(); sort(node+1,node+1+n,cmp); l
=node[1].x;r=node[1].y; for(int i=2;i<=n;i++) { if(r>=node[i].x) r=max(r,node[i].y); else { ans+=(LL)r-l+1; l=node[i].x; r=node[i].y; } } ans+=r-l+1; printf("%lld",ans); return 0; }

洛谷——P2082 區間覆蓋(加強版)