zoukankan      html  css  js  c++  java
  • Trace

    ps:注意不存在一个矩形包含另一个矩形的情况。那么最终图形的轮廓,一定是阶梯状的。

    那么怎么算贡献呢?因为我们知道最终的轮廓,所以倒着来,假设当前处理矩形A(x,y),那么如果存在B(x1,y1),y1 < y(因为不存在包含的关系,所以x1 > x),则 A对答案的最终贡献是 : y - y1,仔细推敲,因为倒着来,所以是先画矩形A,再画矩形B,那么B就会遮挡矩形A的一部分。显然可能会存在多个B,选哪个B呢?选离A最近的那个(图中B1)

    因为不存在一个矩形包含另一个矩形,所以上述做法能保证正确性。(很考思维的一道题:感觉很多题思维上总有递推的关系,总的贡献由一些小贡献按照某种顺序累加得到!)

    int n;
    vector<int> x, y;
    
    LL Solve(vector<int> &tp) {
        set<int> s;
        LL res = 0;
        for (int i = n - 1; ~i; --i) {
            auto sp = s.lower_bound(tp[i]);
            if (sp == s.begin()) res += tp[i];
            else {
                sp--;
                res += (tp[i] - *sp);
            }
            s.insert(tp[i]);
        }
        return res;
    }
    
    int main()
    {
        cin >> n;
        int u, v;
        Rep(i, 1, n) {
            cin >> u >> v;
            x.pb(u), y.pb(v);
        }
        LL ans = 0;
        ans += Solve(x);
        ans += Solve(y);
        cout << ans << endl;
        return 0;
    }
  • 相关阅读:
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    关于值类型与列类型不匹配,所需类型是 DataRow"的解决方案
    如何给excel设置密码
    Excel如何将大写字符转化为小写
    C#调用WebService(服务引用-xml)
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/9638251.html
Copyright © 2011-2022 走看看