1236:區間合併
阿新 • • 發佈:2021-08-12
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 const int N=10005; 6 int t[N]; 7 8 int main(){ 9 int n,a,b,mina=N,maxb=0; 10 cin>>n; 11 for(int i=0;i<n;i++){ 12 scanf("%d%d",&a,&b); 13 for(int i=a;i<=b;i++)t[i]=1; 14 if(mina>a)mina=a; 15 if(maxb<b)maxb=b; 16 } 17 int i=mina; 18 for(;i<=maxb;i++){ 19 if(!t[i]){ 20 cout<<"no"; 21 break; 22 } 23 } 24 if(i>maxb)cout<<mina<<" "<<maxb; 25 return 0; 26}
使用分治只拿了40分Ծ‸Ծ,期待哪天二刷用得上!(掩耳盜鈴、自欺欺人)
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 using namespace std; 5 6 const int N=50005; 7 struct sec{ 8 int a,b; 9 }; 10 sec s[N]; 11 sec dac(int be,int en){ 12 sec se1=s[be],se2=s[en]; 13 if(be==en); 14else if(be+1==en){ 15 if(se1.b>=se2.a)se1.b=max(se1.b,se2.b); 16 else se1.a=0;//無效化 17 }else{ 18 int mid=(be+en)/2; 19 if((se1=dac(be,mid)).a&&(se2=dac(mid+1,en)).a&&se1.b>=se2.a) 20 se1.b=max(se1.b,se2.b); 21 else se1.a=0; 22 } 23 return se1; 24 } 25 int cmp(sec x,sec y){ 26 return x.a<y.a; 27 } 28 int main(){ 29 int n; 30 cin>>n; 31 for(int i=1;i<=n;i++)scanf("%d%d",&s[i].a,&s[i].b); 32 sort(s+1,s+n+1,cmp); 33 sec se=dac(1,n); 34 if(se.a)printf("%d %d",se.a,se.b); 35 else cout<<"no"; 36 return 0; 37 }