有一个整数序列,它的每个数各不相同,我们不知道它的长度是多少(即整数个数),但我们知道在某些区间中间至少有多少个整数,用 (L_i,R_i,C_i)(Li,Ri,Ci) 来描述,表示这个整数序列中至少有 C_iCi 个数来自区间 [L_i,R_i][Li,Ri],给出若干个这样的区间,问这个整数序列的长度最少能为多少?
输入格式
第一行一个整数 N\ (1\le N \le 1000)N (1≤N≤1000),表示区间个数;
接下来 NN 行,每行三个整数L_i,R_i,C_i\ (1\le L_i\le R_i\le 1000,1\le C_i \le R_i-L_i+1)Li,Ri,Ci (1≤Li≤Ri≤1000,1≤Ci≤Ri−Li+1),描述一个区间和区间内数至少有 C_iCi 个,相邻两数之间以一个空格分隔。
输出格式
一个数,表示该整数序列的最小长度。
#include<cstdio>
#include<algorithm>
using namespace std;
struct node {
int l,r,c;
}e[1010];
int n,ans;
bool v[1010];
bool cmp(struct node a,struct node b) {
return a.r<b.r;
}
int main() {
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d%d%d",&e[i].l,&e[i].r,&e[i].c);
}
sort(e+1,e+n+1,cmp);
for(int i=1;i<=n;i++) {
int tot=0;
for(int j=e[i].l;j<=e[i].r;j++) {
if(v[j]) tot++;
}
if(tot<e[i].c) {
for(int j=e[i].r;j>=e[i].l;j--) {
if(!v[j]) {
v[j]=1,tot++,ans++;
if(tot==e[i].c) break;
}
}
}
}
printf("%d",ans);
return 0;
}