




#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int Start[100000];                //定义存储开始时间的数组
int End[100000];                  //定义存储结束时间的数组
pair<int, int> works[100000];     //用于存储工作的pair数组
int N;                            //N代表一共有多少项工作
int main() {
	int i;
	int sum = 0;                  //代表选取工作的总数
	int t = 0;                    //t代表当前所选工作的结束时间(默认为0)
	scanf("%d", &N);
	for (i = 0; i < N; i++) {
		scanf("%d", &Start[i]);   //进行开始时间的赋值
	}
	for (i = 0; i < N; i++) {
		scanf("%d", &End[i]);     //进行结束时间的赋值
	}
	for (i = 0; i < N; i++) {
		works[i] = make_pair(End[i], Start[i]);     //因为这里贪心策略需要选择结束时间最早的可选工作,又因为pair数对是按照first排序,所以我们让结束时间放在first中,让开始时间放在second中。     
	}
	sort(works, works + N);       //在所有的工作中进行结束时间的排序(从小到大,因为我们要选择结束时间最早的可选工作)
	for (i = 0; i < N; i++) {
		if (t < works[i].second) {    //如果所遍历工作的起始时间,比当前所选工作的结束时间大,那么该工作就可选,否则不可选。
			sum++;                    //工作选完之后,选取工作的总数+1
			t = works[i].first;       //t等于当前所选工作的结束时间
		}
	}
	cout << sum << endl;
}

原文:https://www.cnblogs.com/gao79135/p/14250834.html