码迷,mamicode.com
首页 > 其他好文 > 详细

Tallest Cow(POJ3263)

时间:2019-04-24 14:42:52      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:关系   cow   pair   相互   tin   前缀和   mat   pre   std   

Tallest Cow(POJ3263)

给出N头牛的身高,和M对关系(ai与bi可以相互看见。即他们中间的牛都比他们矮)。已知最高的牛为第P头,身高为H。求每头牛的身高最大可能是多少。( \(1 \leq N,M \leq 10^4, 1 \leq H \leq 10^6\) )

输入样例:

9 3 5 5
1 3
5 3
4 3
3 7
9 8

输出样例:

5
4
5
3
4
4
5
5
5

分析:

朴素解法:数组C初始化0 ,ai与bi之间的数减一 最后设C[P] = 0 即Hi = H+C[i] \(O(NM)\)

前缀和:把对一个区间的操作转化为左右两个端点的操作,再通过前缀和得到原问题的解

? 数组D初始化0,D[ai+1]-=1,D[bi]+=1 最后 \(C[i] = \sum_{j=1}^iD[j]\) \(O(N+M)\)

题解:

#include<iostream>
#include<map>

using namespace std;

map<pair<int,int>,bool> existed;  //处理重复的成对关系
int c[10010],d[10010];

int main(){
    int n,p,h,m;
    cin>>n>>p>>h>>m;
    
    for(int i=1;i<=m;i++){
        int a,b,t;
        cin>>a>>b;
        if(a>b){t=a;a=b;b=t;}
        if(existed[make_pair(a,b)])continue;
        d[a+1]--;d[b]++;
        existed[make_pair(a,b)] = true;
    }


    for(int i=1;i<=n;i++){
        c[i] = c[i-1] + d[i];
        cout<<h+c[i]<<endl;
    }
    return 0;
}

Tallest Cow(POJ3263)

标签:关系   cow   pair   相互   tin   前缀和   mat   pre   std   

原文地址:https://www.cnblogs.com/wendiudiu/p/10762178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!