poj 3263

传送门

解题思路

如果x与y互相看见,那么他们一定比之间的高,所以给他们之间的高度-1,最后得到的答案是所有牛的高度+h,之间-1会T,用差分数组或线段树维护即可。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>

using namespace std;
const int MAXN = 10005;

inline int rd(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
    while(isdigit(ch))  {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    return f?x:-x;
}

int n,l,h,r,d[MAXN],a[MAXN];
map<pair<int,int>,bool> mp;

int main(){
    n=rd(),l=rd(),h=rd(),r=rd();int x,y;
    for(int i=1;i<=r;i++){
        x=rd(),y=rd();
        if(mp.count(make_pair(x,y))) continue;
        mp[make_pair(x,y)]=1,mp[make_pair(y,x)]=1;
        if(x>y) swap(x,y);
        d[x+1]--,d[y]++;
    }
    for(int i=1;i<=n;i++)
        d[i]+=d[i-1],printf("%d\n",d[i]+h);
    return 0;
}
posted @ 2018-09-16 20:33  Monster_Qi  阅读(287)  评论(0编辑  收藏  举报