区间问题
描述:
有n项工作,每项工作分别在 si时间开始,ti时间结束。对于每项工作你选择参与与否,如果选择 了参与,那么自始至终就必须全程参与。参与工作的时间段不可以重叠(即使是开始的瞬间和结束的瞬间重叠也是不允许的) 。
你的目标是参与尽可能多的参与工作,那么最多能参与多少项工作呢?
输入:
输入数据有多组,每组数据:
第一行为正整数n(1<=n<=10^5),表示工作的数目;
第二行有n个整数,表示每项工作的起始时间si;
第三行有n个整数,表示每项工作的结束时间ti。
1<=si<=ti<=10^9
输入以EOF结束。
输出:
每组输出一个整数,表示最多能参与的工作数目。
样例:
5
1 2 4 6 8
3 5 7 9 10
3
代码时间长…看着再优化吧,渣渣的水平只能到这里了。
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 100005
struct p{
int yi,er;
}qy[MAX];
bool cmp(p a,p b)
{
return a.er<b.er;
}
int main()
{
int n;
while(cin>>n&&n)
{
for(int i=0;i<n;i++) cin>>qy[i].yi;
for(int i=0;i<n;i++) cin>>qy[i].er;
sort(qy,qy+n,cmp);
int ans=0,t=0;
for(int i=0;i<n;i++)
if(t<qy[i].yi)
{
t=qy[i].er;
ans++;
}
cout<<ans<<endl;
}
}