玻璃切割

思路:

  并查集;

  离线操作;

  先把每次切割都存下来;

  然后从后面不断合并切割;

  然后每次更新最大长和宽;

  记录答案;

  要开longlong;

来,上代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 400005
#define ll long long struct OperType {
ll l,r,x;
};
struct OperType hh[maxn],ww[maxn]; struct CutType {
ll x,id;
};
struct CutType qh[maxn],qw[maxn]; ll f1[maxn],f2[maxn],w,h,n,totw,toth,dis1[maxn],dis2[maxn];
ll answ,ansh,ans[maxn]; bool ty[maxn]; inline void in(ll &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} ll find1(ll x)
{
if(f1[x]==x) return f1[x];
f1[x]=find1(f1[x]);
return f1[x];
} ll find2(ll x)
{
if(f2[x]==x) return f2[x];
f2[x]=find2(f2[x]);
return f2[x];
} bool cmp(CutType aa,CutType bb)
{
return aa.x<bb.x;
} int main()
{
in(w),in(h),in(n);char ch[];
for(ll i=;i<=n;i++)
{
scanf("%s",ch);
if(ch[]=='H')
{
ty[i]=true;
in(hh[++toth].x);
qh[toth].x=hh[toth].x;
qh[toth].id=toth,f1[toth]=toth;
}
else
{
in(ww[++totw].x);
qw[totw].x=ww[totw].x;
qw[totw].id=totw,f2[totw]=totw;
}
}
sort(qw+,qw+totw+,cmp);
sort(qh+,qh+toth+,cmp);
ll pos=;f1[toth+]=toth+,f2[totw+]=totw+;
for(ll i=;i<=toth;i++)
{
dis1[i]=qh[i].x-pos,pos=qh[i].x,ansh=max(dis1[i],ansh);
hh[qh[i].id].l=i,hh[qh[i].id].r=i+;
}
dis1[toth+]=h-pos,ansh=max(ansh,dis1[toth+]),pos=;
for(ll i=;i<=totw;i++)
{
dis2[i]=qw[i].x-pos,pos=qw[i].x,answ=max(dis2[i],answ);
ww[qw[i].id].l=i,ww[qw[i].id].r=i+;
}
dis2[totw+]=w-pos,answ=max(answ,dis2[totw+]);
ans[n]=answ*ansh;
for(ll i=n;i>;i--)
{
if(ty[i])
{
ll x=find1(hh[toth].l),y=find1(hh[toth].r);
if(x!=y)
{
dis1[x]+=dis1[y],f1[y]=x;
ansh=max(ansh,dis1[x]);
}
toth--;
}
else
{
ll x=find2(ww[totw].l),y=find2(ww[totw].r);
if(x!=y)
{
dis2[x]+=dis2[y],f2[y]=x;
answ=max(answ,dis2[x]);
}
totw--;
}
ans[i-]=answ*ansh;
}
for(ll i=;i<=n;i++) printf("%lld\n",ans[i]);
return ;
}

AC日记——玻璃切割 51nod 1562的更多相关文章

  1. AC日记——最高奖励 51nod 1163

    最高的奖励 思路: 排序: 时间为第一关键字,按总小到大排: 价值为第二关键字,按从大到小排: 然后,不难看出,如果两个时间不同: 那么,两个时间之间最少能做一件事: 因为他们的时间下限最少相差1: ...

  2. AC日记——幸运号码 51nod 1043

    幸运号码 思路: 传说中的数位dp: 不难发现,n(n<1000) ,那么,n个数的最大和为9*1000=9000: 对于9000*1000的时间范围,我们可以用dp来解决: dp[i][j], ...

  3. AC日记——石子归并 51nod 1021

    石子归并 思路: 经典动态规划——归并类问题: 我们把状态划为n个,即1-n的n个长度为n个状态: 那么,每个长度为i的状态都可以由i-1个长度为i-1的状态推出: 所以,dp转移方程: dp[i][ ...

  4. AC日记——背包问题 V2 51nod 1086

    有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...

  5. 51nod 1562 玻璃切割

      1562 玻璃切割 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1562 题目来源: CodeForces 基准时间 ...

  6. 51nod 1562 玻璃切割 (STL map+一点点的思考)

    1562 玻璃切割 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 现在有一块玻璃,是长方形的(w 毫米× h 毫米),现在要 ...

  7. AC日记——codevs1688求逆序对

    AC日记--codevs1688求逆序对 锵炬 掭约芴巷 枷锤霍蚣 蟠道初盛 到被他尽情地踩在脚下蹂躏心中就无比的兴奋他是怎么都 ㄥ|囿楣 定要将他剁成肉泥.挫骨扬灰跟随着戴爷这么多年刁梅生 圃鳋 ...

  8. 51nod 1562 玻璃切割 (set)

    #include<stdio.h> #include<iostream> #include<set> using namespace std; typedef lo ...

  9. AC日记——最小正子段和 51nod 1065

    最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...

随机推荐

  1. Android学习记录(2)—Android中数据库的常见操作

    android中数据库操作是非常常见了,我们会经常用到,操作的方法也有很多种形式,这里我就把最常见的两种形式记录下来了,以备以后用到方便查看.我就不写注释和解释了,因为android数据库的操作和其它 ...

  2. 以+scheduledTimerWithTimeInterval...的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为什么?如何解决?

    这里强调一点:在主线程中以+scheduledTimerWithTimeInterval...的方式触发的timer默认是运行在NSDefaultRunLoopMode模式下的,当滑动页面上的列表时, ...

  3. 《Cracking the Coding Interview》——第17章:普通题——题目8

    2014-04-28 23:35 题目:最大子数组和问题. 解法:O(n)解法. 代码: // 17.8 Find the consecutive subarray with maximum sum ...

  4. 【APUE】Chapter12 Thread Control

    今天看了APUE的Chapter12 Thread Control的内容,记录一下看书的心得与示例code. 这一章的内容是对Chapter11 Threads(见上一篇日志)的补充,大部分内容都是理 ...

  5. java中封装的概念

    封装(Encapsulation)是类的三大特性之一, 就是将类的状态信息隐藏在类的内部,不允许外部程序直接访问, 而是通过该类提供的方法来实现对隐藏信息的操作和访问. 简而言之,就是隐藏内部实现,提 ...

  6. 每天一个Linux命令(5):rm命令

    rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变. 语法 rm (选项)(参数) 选项 - ...

  7. 【转载】Unity3D研究院之IOS&Andoird使用Sharesdk遇到的坑

    这两天研究了一下ShareSDK,说实话挺好用的,但是还是有点坑的地方.那么雨松MOMO写下博文记录一下来我遇到的坑,嘿嘿. 大部分内容它的文档上已经说的很清楚了. http://wiki.share ...

  8. heat launch an instance

    在包含Orchestration服务的环境中,可以创建启动实例的堆栈 创建yam文件 heat_template_version: 2015-10-15 description: Launch a b ...

  9. HDU 4681 String 胡搞

    设串C的第一个字母在串A中出现的位置是stA, 串C的最后一个字母在串A中出现的位置是edA. 设串C的第一个字母在串B中出现的位置是stB, 串C的最后一个字母在串B中出现的位置是edB. 求出每一 ...

  10. 【bzoj2770】YY的Treap 权值线段树

    题目描述 志向远大的YY小朋友在学完快速排序之后决定学习平衡树,左思右想再加上SY的教唆,YY决定学习Treap.友爱教教父SY如砍瓜切菜般教会了YY小朋友Treap(一种平衡树,通过对每个节点随机分 ...