问题描述及输入输出:
第一行输入n表示下面要输入的行数;
接下来输入n行:
输入:
3
1 1 5 10 //第1个数表示成长类型为1(常规成长值),2和5意思是成长从第一天开始到第五天结束,10表示每天成长值为10,则1到5天,第五天成长值为50;
2 3 4 //第一个数为2表示会员成长类型,3,4表示第四天会员成长值为4
1 4 6 -5
输出最后一天的成长值总计;
注意:每天的常规成长值取最大值
输出:49
#include <iostream>
#include<algorithm>
#include <cstdio>
#include<math.h>
using namespace std;
int const INF=2147483640;
int a[10000000];
int main(){
int n,tp;
int st,ed,val;
int sum=0;
int day;
int len=0;
cin>>n;
for(int i=0;i<10000000;i++){
a[i]=-INF;//要初始化为很小的数
}
while(n--){
cin>>tp;
if(tp==1){
cin>>st>>ed>>val;
for(int k=st;k<=ed;k++){
a[k]=max(a[k],val);
}
len=max(len,ed); //取每天最大的值
}
else if(tp==2){
cin>>day>>val;
sum+=val;
len=max(len,day);
}
}
for(int i=1;i<=len;i++){
if(a[i]!=-INF)
sum+=a[i];
}
cout<<sum<<endl;
}