美文网首页
51nod 1562 玻璃切割

51nod 1562 玻璃切割

作者: 无令便逐风 | 来源:发表于2018-08-03 17:59 被阅读0次

题目链接戳这里

方法是逆序操作。首先设计一个存储结构Line。l、r、val分别代表:左和右相邻的一条线的下标,以及当前线距离左相邻线的距离。

fx,fy的第i个元素为1表示x轴或y轴方向在i位置有切割操作。全部操作完之后,每次去掉一条线,更新左右的Line的数据,得出该操作的结果即可。

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define rep(i,a,b) for(int i=(a);i<(b);++i)

const int maxN=2e5+5;

struct Line { ll l, r, val; };
struct Ope { char ch; ll x; };

Line H[maxN], V[maxN];
Ope s[maxN];
ll fx[maxN], fy[maxN], ans[maxN];

int main() {
#ifndef ONLINE_JUDGE
    freopen("data.in", "r", stdin);
#endif

    ll w, h, n, bx, by, old;
    scanf("%lld%lld%lld\n", &w, &h, &n);
    fx[0] = fx[h] = fy[0] = fy[w] = 1;

    for (int i = 1; i <= n; ++i) {
        scanf("%c%lld\n", &s[i].ch, &s[i].x);
        if (s[i].ch == 'H') fx[s[i].x] = 1;
        else fy[s[i].x] = 1;
    }

    bx = by = 0;
    for (int i = old = 0; i <= h; ++i) {
        if (fx[i] == 1) {
            H[i].l = old;
            H[i].val = i - old;
            H[old].r = i;
            old = i;
            bx = max(bx, H[i].val);
        }
    }
    H[h].r = h;
    for (int i = old = 0; i <= w; ++i) {
        if (fy[i] == 1) {
            V[i].l = old;
            V[i].val = i - old;
            V[old].r = i;
            old = i;
            by = max(by, V[i].val);
        }
    }
    V[w].r = w;
    ans[n] = bx * by;

    for (int i = n; i >= 2; --i) {
        if (s[i].ch == 'H') {
            Line t = H[s[i].x];
            H[t.r].val += t.val;
            H[t.r].l = t.l;
            H[t.l].r = t.r;
            bx = max(bx, H[t.r].val);
        } else {
            Line t = V[s[i].x];
            V[t.r].val += t.val;
            V[t.r].l = t.l;
            V[t.l].r = t.r;
            by = max(by, V[t.r].val);
        }
        ans[i - 1] = bx * by;
    }
    for (int i = 1; i <= n; ++i)
        printf("%lld\n", ans[i]);
    return 0;
}

相关文章

  • 51nod 1562 玻璃切割

    题目链接戳这里 方法是逆序操作。首先设计一个存储结构Line。l、r、val分别代表:左和右相邻的一条线的下标,以...

  • 水刀玻璃行业切割特点以及应用

    玻璃切割是水刀非常重要的一个方面,水刀通过水压转化为速度通过水和金刚砂对玻璃进行侵蚀,最终造成切割,使玻璃切割面平...

  • 在水刀上切割玻璃

    大多数玻璃在水刀上有着很好地切割,但不同种类的玻璃有着不同的方式。比如,穿孔是水刀切割玻璃的一个简单且有挑战性的部...

  • 懂感情的玻璃

    懂感情的玻璃 文/黄影 天天在玻璃车间走 总听到磨边机上 玻璃痛苦的呻吟 在电切割台前 玻璃在...

  • 玻璃激光切割机工厂设备加工好处

    玻璃激光切割机的加工优势人们通过各种形式的传统技术切割玻璃已有几个世纪之久,通常是先用锋利且坚硬的工具(如金刚石或...

  • 水刀切割玻璃如何避免边缘碎裂

    水刀切割玻璃制品的时候,部分设备切割后会出现玻璃边缘碎裂不平整的问题。其实设置完好的水刀是存在此类的问题,如果出现...

  • 激光切割机常见的小问题

    激光切割机在工作的时候对温度的稳定性要求比较高,那么激光切割机常见的问题主要有哪些? 1.玻璃激光切割机作业时,四...

  • 玻璃刀切割使用方法

    玻璃性能出色,可应用于多种场合。在室内装饰方面可以用彩绘玻璃与热熔玻璃,风格多变;在需要保护人身安全的场合适...

  • 2017-09-17

    阳光打在树上,被树叶切割成斑驳的影子,投射在旅人的玻璃窗上

  • 贪心算法 & 动态规划基础题

    [TOC] acm 标签(空格分隔): acm 贪心算法 51Nod 1191消灭兔子 越好,故对兔子血量升序排列...

网友评论

      本文标题:51nod 1562 玻璃切割

      本文链接:https://www.haomeiwen.com/subject/fksuvftx.html