题目大意:
n个建筑,每个建筑有两个值,一个为修它的时间长度 一个为它的截止日期(若超过该日期则无法修建该建筑)
求最多能修多少个建筑
思路:
首先我们可以把它们按照截止日期排序
然后在正常贪心的基础上 做一个优化
我们把已经修过的建筑的修建时间都放到一个队里
每次如果一个建筑不能修
那么我们考虑一下能否把当前的堆顶换成这个建筑
这样就可以省下来时间
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define inf 214748361110 #define ll long long11 #define MAXN 150000012 using namespace std;13 inline ll read()14 {15 ll x=0,f=1;char ch=getchar();16 while(!isdigit(ch)) { if(ch=='-') f=-1;ch=getchar();}17 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}18 return x*f;19 }20 struct data21 {22 int dl,tm;23 bool operator < (const data &a) const24 {25 return dl