洛谷——P2082 區間覆蓋(加強版)
阿新 • • 發佈:2017-12-02
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 區間覆蓋(加強版)