得分情况如图所示,本人思路是先按照结束范围排序,然后将每一个房子的范围从后往前种树,直到满足条件。
#include<bits/stdc++.h>
using namespace std;
struct data
{
int beg,end,num;
}d1[500005];
bool area[300005];
bool cmp(data x,data y)
{
if(x.end==y.end) return x.beg>y.beg;
return x.end<y.end;
}
int main()
{
int n,h,tot=0;
cin>>n>>h;
for(int i=1;i<=h;i++)
{
cin>>d1[i].beg>>d1[i].end>>d1[i].num;
}
sort(d1+1,d1+h+1,cmp);
for(int i=1;i<=h;i++)
{
int ko=d1[i].end;
for(int j=d1[i].beg;j<=d1[i].end;j++)
{
if(area[j]) d1[i].num--;
}
while(d1[i].num!=0)
{
area[ko]=1;
ko--;
d1[i].num--;
tot++;
}
}
cout<<tot;
return 0;
}