1. 程式人生 > >洛谷 2434 [SDOI2005]區間

洛谷 2434 [SDOI2005]區間

技術分享 etc reg i++ open main rec png info

技術分享圖片

【題解】

  鮮活的大水題。。。

  把區間排個序然後瞎搞就可以了,發現現在區間的左端點比之前區間的最大的右端點還大,那就增加一個答案區間。每次更新目前最大右區間。

  

技術分享圖片
 1 #include<cstdio>
 2 #include<algorithm>
 3 #define N 200010
 4 #define rg register
 5 using namespace std;
 6 int n,m,tot;
 7 struct rec{
 8     int l,r;
 9 }a[N],ans[N];
10 inline int read(){
11     int
k=0,f=1; char c=getchar(); 12 while(c<0||c>9)c==-&&(f=-1),c=getchar(); 13 while(0<=c&&c<=9)k=k*10+c-0,c=getchar(); 14 return k*f; 15 } 16 inline bool cmp(rec x,rec y){ 17 if(x.l==y.l) return x.r<y.r; 18 return x.l<y.l; 19 } 20 int main(){
21 n=read(); 22 for(rg int i=1;i<=n;i++) a[i].l=read(),a[i].r=read(); 23 sort(a+1,a+1+n,cmp); 24 ans[tot=1].l=a[1].l; 25 int mxr=ans[1].r=a[1].r; 26 for(rg int i=2;i<=n;i++){ 27 if(a[i].l>mxr){ 28 ans[++tot].l=a[i].l; 29 ans[tot].r=a[i].r;
30 } 31 mxr=max(mxr,a[i].r); 32 ans[tot].r=mxr; 33 } 34 for(rg int i=1;i<=tot;i++) printf("%d %d\n",ans[i].l,ans[i].r); 35 return 0; 36 }
View Code

洛谷 2434 [SDOI2005]區間