zoukankan      html  css  js  c++  java
  • POJ3263 Tallest Cow 【差分,思维】

    根据题目很容易想到,可以把初始身高都设置为H,A能看到B的话,只需要把[A+1,B-1]里面的牛身高都减一就可以啦~

    但现在就存在一些问题:若A可以看到B,那么A的身高必须要<=B,而且中间的牛也可能会比A高,只是-1不可行,怎么办呢?

    实际上,A的身高本来就必定不可能大于B。因为两对A_x,B_x不能存在交叉,只能像括号序列一样一一匹配。所以既然不可能会有不同的A_x,B_x对跨过当前的AB,那么他们的最大高度一定是相同的。同理,[A+1,B-1]里面也是只能比A低不能比A高,所以就可以放心地差分啦~

    #include <map>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int N = 10000 + 5;
    
    int n, I, H, r, sum[N];
    
    map <pair <int, int>, bool> _exist;
    
    int main () {
        // freopen ("data.in", "r", stdin);
        cin >> n >> I >> H >> r;
        sum[1] = H;
        while (r--) {
            int x, y;
            cin >> x >> y;
            if (x > y) swap (x, y);
            if (_exist.count(make_pair (x, y))) {
                continue;
            } 
            _exist[make_pair(x, y)] = true;
            sum[x + 1] -= 1;
            sum[y] += 1;
        }
        cout << sum[1] << endl;
        for (int i = 2; i <= n; ++i) {
            // cout << "sum[" << i << "] = " << sum[i] << endl;
            sum[i] += sum[i - 1];
            cout << sum[i] << endl;
        }
    }
    
  • 相关阅读:
    如何给博客园添加背景canvas线条动画背景
    过去-现在-未来
    如何将图片转化为代码图片
    css3炫酷登录页面
    图片跟随鼠标移动特效
    css3实现鼠标移入图片特效
    在线上传图片获取url
    《程序员修炼之道:从小工到专家》读后感01
    动手动脑-随机数和重载
    JAVA学习第三周
  • 原文地址:https://www.cnblogs.com/maomao9173/p/13792028.html
Copyright © 2011-2022 走看看