求墙的面积。高手帮忙提供思路
现在有一面墙,这面墙的高度并不是固定的。区间 [l, r] 和这个区间的高度h。如果有重叠的部
分 ,取最高的高度。
★ 数据输入
输入 第一行有一个正整数 n(1<=n<=10000), 表示 n 个回复。
接下来 n 行,每行有三个数字 l r h ,表示区间 [l, r] 的高度为 h 。
计算过程中所有数据均在 int 范围之内。
★ 数据输出
输出墙的面积。
输入示例 输出示例
3
1 5 5
1 3 8
4 5 9
30
★ 样例说明
区间 [1, 5] 高度为 5 , 区间 [1, 3] 高度为 8 ,区间 [4, 5] 高度为 9 。所以实际墙的高度应为
区间 [1, 3] 高度为 8 ,区间 [3, 4] 高度为 5 ,区间 [4, 5] 高度为 9 。总面积 S=8*(3-1)+5*(4-3)+9* (5-
4)=30 。
我自己想通过单向链表来实现。但不会处理区间面积交叉问题。
#include<iostream>
using namespace std;
class WALL
{
private:
public:
int left;
int right;
int height;
int area;
WALL *next;
WALL():left(0),right(0),height(0),next(0),area(0)
{
}
void get_data()
{
scanf("%d%d%d",&left,&right,&height);
area=(right-left)*height;
}
~WALL()
{}
};
int main()
{
int num;
int i=0;
WALL *head=NULL;
WALL *temp1,*temp2;
scanf("%d",&num);
while(i<num)//数据录入
{
temp1=(WALL *)malloc(sizeof(WALL));
if(head==NULL)
head=temp1;
else
temp2->next=temp1;
temp1->next=NULL;
temp1->get_data();
temp2=temp1;
++i;
}
return 0;
}
大家能帮忙想个函数来处理面积交叉的问题吗?