![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827212529244.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3NDUyMA==,size_16,color_FFFFFF,t_70)
题目分析:
- 如果
(
x
,
y
)
能
互
相
看
到
,
则
(
x
,
y
)
的
高
度
都
比
x
和
y
小
,
使
中
间
高
度
都
−
1
,
差
分
实
现
(x,y)能互相看到,则(x,y)的高度都比x和y小,使中间高度都-1,差分实现
(x,y)能互相看到,则(x,y)的高度都比x和y小,使中间高度都−1,差分实现
- 由于给出条件重复,用
m
a
p
map
map判重
Code:
#include <bits/stdc++.h>
using namespace std;
#define maxn 10005
int n,p,h,m,a[maxn];
map< pair < int , int > , bool > vis;
inline int read_() {
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return x*f;
}
void readda_() {
memset(a,0,sizeof(a));
n=read_();p=read_();
h=read_();m=read_();
int x,y;
while(m--) {
x=read_();y=read_();
if(x>y) swap(x,y);
if(vis[make_pair(x,y)]) continue;
--a[x+1];++a[y];
vis[make_pair(x,y)]=1;
}
int last=0;
for(int i=1;i<=n;++i) {
last+=a[i];
printf("%d\n",h+last);
}
}
int main() {
freopen("a.txt","r",stdin);
readda_();
return 0 ;
}