**
题目大意
**
有一排数量为n的牛,并且知道最高的牛的高度,接下来输入两个数a与b,意思是b牛可以看到a牛,换句话来说,就是b的高度大于等于a,且在这区间内所有牛都不高与a与b。
**
具体思路
**
如果单纯的用暴力模拟,那么每次的区间的重叠区域就难以判断且复杂,在网络上看解题思路应是对每一区间的开头与结尾做标记记录增与减去的高度,并且下一项再前一项的基础上再增加或减少。
细节
此题有一处坑在于会把区间重复输入,所以查重很关键,可以用map函数来存储区间查重,亦可以用结构体数组来存储后排序查重。
代码
#include<bits/stdc++.h>
using namespace std;
int ans[10010],d[10010];
int main()
{
map<pair<int,int>,int>mp;
int n,I,h,p;
cin>>n>>I>>h>>p;
while(p--)
{
int a,b;
cin>>a>>b;
if(a>b){swap(a,b);}
if(mp[make_pair(a,b)]){continue;}
d[a+1]--;
d[b]++;
}
for(int i=1;i<n;i++){
ans[i]=ans[i-1]+d[i];
cout<<ans[i]+h<<endl;
}
}