đề ạ
Sông Tiền là một trong hai nhánh sông lớn của sông Mekong. Trước đây việc lưu thông hàng hoá qua lại giữa hai bờ sông chủ yếu bằng phà và các tuyến đò ngang. Từ năm 2000 cầu Mỹ thuận đã được đưa vào sử dụng góp phần không nhỏ vào sự phát triển kinh tế vùng ĐBSCL. Tuy nhiên trước đó không thể phủ nhận vai trò rất lớn của các tuyến đò ngang.
Hiện tại dọc sông Tiền có N tuyến đó ngang đang hoạt động, mỗi tuyến nối một điểm ở bờ bắc với một điểm ở bờ nam. Các tuyến đò được đánh số từ 1 đến N, tuyến thứ i nối điểm xi bờ Bắc với điểm yi ở bờ Nam (Toạ độ là như nhau ở hai bờ). Vấn đề đặt ra là các tuyến khi đưa vào sử dụng có một số giao cắt và như vậy có thể gây nguy hiểm cho hành khách vì có thể xảy ra va chạm. Ngay cả giao nhau tại hai đầu mút cũng gây ra nguy hiểm khi cùng cập bến. Chính quyền muốn dừng một số tuyến đò để các tuyến đò được giữ lại không không giao cắt nhau.
Yêu cầu: Hãy tìm một phương án dừng hoạt động ít nhất các tuyến đò sao cho những tuyến đò còn hoạt động sẽ không giao cắt nhau. Hai tuyến đò gọi là giao cắt nếu có một điểm chung. Điểm giao cắt ở hai đầu mút cũng tính là điểm giao cắt nguy hiểm.
Dữ liệu nhập:
Dòng đầu tiên ghi số nguyên dương N (1 ≤ N ≤ 105)
N dòng tiếp theo mỗi dòng ghi thông tin về một tuyến đò là hai số nguyên dương bé hơn 109.
Kết quả:
- Ghi ra một số nguyên duy nhất là số tuyến đò ít nhất cần dừng hoạt động.
đoạn code ạ
#include<bits/stdc++.h>
using namespace std;
struct m
{
long int x,y,z;
};
bool sx (const m&p,const m&q)
{
if(p.x!=q.x)return p.x<q.x;
else return p.y<q.y;
};
m a[100001];
long int b[1000001],tr[1000001];
int n;
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.inp","r",stdin);
freopen("input.out","w",stdout);
#endif
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].x;
cin>>a[i].y;
}
sort(a+1,a+n+1,sx);
for(int i=1;i<=n;i++)
{
b[i]=0;tr[i]=0;
for(int j=1;j<=i;j++)if(a[i].x>=a[j].y&&b[i]<b[j]+1)
{
b[i]=b[j]+1;
tr[i]=j;
}
}
int m=0;
for(int i=1;i<=n;i++)if(m<b[i])
{
m=b[i];
}
cout<<n-m;
}