CodeForces528A (STLset)
题面
题解
横着切和竖着切是互相不影响的。
假设现在横着切成了很多段,显然此时面积最大的矩形的一边长就是这些段中长度最长的一段。竖着切的也是一样的。
所以就可以用$set$来维护切过的横、纵坐标与每一段的长度。
修改时,先找到相邻的两刀,再找到对应的长度,删去这个长度,再加入切出来的两个新的长度。
一开始要把$\mathbf W$、$\mathbf H$这些东西加进去。
#include <set>
#include <cstdio>
#include <cstring>
#include <algorithm>
using std::min; using std::max;
using std::sort; using std::swap;
using std::unique; using std::lower_bound;
using std::set;
typedef long long ll;
template<typename T>
void read(T &x) {
int flag = 1; x = 0; char ch = getchar();
while(ch < '0' || ch > '9') { if(ch == '-') flag = -flag; ch = getchar(); }
while(ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar(); x *= flag;
}
const int _ = 2e5 + 10;
int W, H, n, w[_], h[_];
int main () {
read(W), read(H), read(n);
set<int> sw, sh, qw, qh;
sw.insert(W), sw.insert(-W);
sh.insert(H), sh.insert(-H);
qw.insert(0), qw.insert(W), qw.insert(-W);
qh.insert(0), qh.insert(H), qh.insert(-H);
++w[W], ++h[H]; char ch[3]; int x;
for(int i = 1; i <= n; ++i) {
scanf("%s%d", ch, &x);
if(ch[0] == 'H') {
qh.insert(x), qh.insert(-x);
int r = *(qh.upper_bound(x));
int l = -*(qh.upper_bound(-x));
if(h[r - l]) --h[r - l];
if(!h[r - l]) sh.erase(r - l), sh.erase(l - r);
sh.insert(x - l), ++h[x - l];
sh.insert(r - x), ++h[r - x];
sh.insert(l - x), sh.insert(x - r);
} else {
qw.insert(x), qw.insert(-x);
int r = *(qw.upper_bound(x));
int l = -*(qw.upper_bound(-x));
if(w[r - l]) --w[r - l];
if(!w[r - l]) sw.erase(r - l), sw.erase(l - r);
sw.insert(x - l), ++w[x - l];
sw.insert(r - x), ++w[r - x];
sw.insert(l - x), sw.insert(x - r);
}
set<int>::iterator r1, r2;
r1 = sh.begin(), r2 = sw.begin();
printf("%lld\n", (ll)(*r1) * (*r2));
}
return 0;
}
CodeForces528A (STLset)的更多相关文章
- PAT 1028 人口普查(20)(STL-set+思路+测试点分析)
1028 人口普查(20)(20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ASP.NET Core 之 Identity 入门(一)
前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Online Judge(OJ)搭建(第一版)
搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- 【.net 深呼吸】细说CodeDom(5):类型成员
前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员. 咱们都知道,常见的类型成员,比如字段.属性.方法.事件.表示代码成 ...
随机推荐
- [转载]strtok函数和strtok_r函数
1.一个应用实例 网络上一个比较经典的例子是将字符串切分,存入结构体中.如,现有结构体 typedef struct person{ char name[25]; char sex[1 ...
- python核心编程笔记——Chapter5
好吧,开始第五章习题: 5-2.又是老调重谈,raw_input这个函数真是非常麻烦,返回是str类型,没办法,只能在函数里面使用int内建.(就只是一道简单的两数相乘,哭了) #!/usr/bin/ ...
- 英雄无敌3开源引擎vcmi的编译安装
TAGS: Heroes3, vcmi, opensourceDATE: 2013-08-23 vcmi是什么? vcmi 是经典的 SLG 英雄无敌3 的开源游戏引擎.原来的英雄无敌3只能在Wind ...
- 20155210潘滢昊 2016-2017-2 《Java程序设计》第5周学习总结
20155210 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 try with resources 关闭多个资源时用分号分隔 java.lang.Auto ...
- POJ 1350 Cabric Number Problem (模拟)
题目链接 Description If we input a number formed by 4 digits and these digits are not all of one same va ...
- 树形dp&&树的重心(D - Godfather POJ - 3107)
题目链接:https://cn.vjudge.net/contest/277955#problem/D 题目大意:求树的重心(树的重心指的是树上的某一个点,删掉之后形成的多棵树中节点数最大值最小). ...
- thinkphp报错Call to undefined method app\index\controller\Index::fetch()
因为要写一个系统,所以又重新下载了thinkphp,然后安装了一下.回忆起这个问题很容易让新手朋友费解.会出现如下报错:Call to undefined method app\index\contr ...
- aarch64_m3
mrpt-stereo-camera-calibration-1.4.0-1.fc26.aarch64.rpm 2017-03-17 10:02 143K fedora Mirroring Proje ...
- 含有ref out 参数 的方法反射 Emit 与 普通
反射中很多朋友应该屡屡被带有ref out参数的方法折腾 当使用正常反射一个方法时候: 代码如下调用一个后期绑定方法MakeByRefType 就行了 MemberInfo test = typeof ...
- C++如何判断大小端
http://bbs.chinaunix.net/thread-1257205-1-1.html #include <stdio.h>#include <string.h>#i ...