CodeForces-1132C Painting the Fence
题目链接
https://vjudge.net/problem/CodeForces-1132C
题面
Description
You have a long fence which consists of \(n\) sections. Unfortunately, it is not painted, so you decided to hire \(q\) painters to paint it. \(i\)-th painter will paint all sections \(x\) such that \(l_i \le x \le r_i\).
Unfortunately, you are on a tight budget, so you may hire only \(q - 2\) painters. Obviously, only painters you hire will do their work.
You want to maximize the number of painted sections if you choose \(q - 2\) painters optimally. A section is considered painted if at least one painter paints it.
Input
The first line contains two integers \(n\) and \(q\) (\(3 \le n, q \le 5000\)) — the number of sections and the number of painters availible for hire, respectively.
Then \(q\) lines follow, each describing one of the painters: \(i\)-th line contains two integers \(l_i\) and \(r_i\) (\(1 \le l_i \le r_i \le n\)).
Output
Print one integer — maximum number of painted sections if you hire \(q - 2\) painters.
Examples
Input
7 5
1 4
4 5
5 6
6 7
3 5
Output
7
Input
4 3
1 1
2 2
3 4
Output
2
Input
4 4
1 1
2 2
2 3
3 4
Output
3
题意
墙长为n,q个工人,每个工人固定粉刷一个区间,区间可能重叠,现在要去掉两个工人,求剩下q-2个工人最多粉刷多少墙
题解
我们可以\(n^2\)枚举去掉的两个工人,然后O(1)查询剩下了多少墙
O(1)查询的方法是:先预处理出每一段墙有多少工人刷,然后处理出每一个工人刷的只有他自己刷的墙的长度,然后预处理出只有两个工人刷的墙的区间的前缀和,然后对于枚举的两个工人,刷过的墙的总数首先要减去两个工人刷的墙的部分中只有一个人刷的部分,因为去掉这个工人这个墙就没人刷了,如果两个工人的覆盖区间有重叠,假设重叠区间\([L,R]\),要减去的区间就是\([L,R]\)中只有两个工人刷的部分,因为去掉这两个工人这段墙就没人刷了
结果取最大值即可
AC代码
#include <bits/stdc++.h>
#define N 5050
using namespace std;
struct seg {
int l, r;
} a[N];
int pre[N];
int pre1[N];
int pre2[N];
int max(int a, int b) {
return a > b ? a : b;
}
int min(int a, int b) {
return a < b ? a : b;
}
int main() {
int n, q;
scanf("%d%d", &n, &q);
int sum = 0;
for (int i = 1; i <= q; i++) {
scanf("%d%d", &a[i].l, &a[i].r);
pre[a[i].l]++; pre[a[i].r + 1]--;
}
for (int i = 1; i <= n; i++) {
pre[i] += pre[i - 1];
}
for (int i = 1; i <= n; i++) {
if (pre[i]) sum++;
}
for (int i = 1; i <= n; i++) {
if (pre[i] == 2) pre1[i]++;
}
for (int i = 1; i <= n; i++) {
pre1[i] += pre1[i - 1];
}
for (int i = 1; i <= q; i++) {
for (int j = a[i].l; j <= a[i].r; j++) {
if (pre[j] == 1) pre2[i]++;
}
}
int L, R;
int ans = 0;
for (int i = 1; i <= q; i++) {
for (int j = i + 1; j <= q; j++) {
L = max(a[i].l, a[j].l);
R = min(a[i].r, a[j].r);
int tmp = sum;
if (R >= L) {
tmp = tmp - (pre1[R] - pre1[L - 1]);
}
tmp -= pre2[i] + pre2[j];
ans = max(tmp, ans);
}
}
printf("%d\n", ans);
return 0;
}
CodeForces-1132C Painting the Fence的更多相关文章
- Codeforces 1132C - Painting the Fence - [前缀和优化]
题目链接:https://codeforces.com/contest/1132/problem/C 题意: 栅栏有 $n$ 个节,有 $q$ 个人可以雇佣来涂栅栏,第 $i$ 个人可以涂第 $l_i ...
- codeforces 349B Color the Fence 贪心,思维
1.codeforces 349B Color the Fence 2.链接:http://codeforces.com/problemset/problem/349/B 3.总结: 刷栅栏.1 ...
- Codeforces 484E Sign on Fence(是持久的段树+二分法)
题目链接:Codeforces 484E Sign on Fence 题目大意:给定给一个序列,每一个位置有一个值,表示高度,如今有若干查询,每次查询l,r,w,表示在区间l,r中, 连续最长长度大于 ...
- [luogu P2205] [USACO13JAN]画栅栏Painting the Fence
[luogu P2205] [USACO13JAN]画栅栏Painting the Fence 题目描述 Farmer John has devised a brilliant method to p ...
- 洛谷 画栅栏Painting the Fence 解题报告
P2205 画栅栏Painting the Fence 题目描述 \(Farmer\) \(John\) 想出了一个给牛棚旁的长围墙涂色的好方法.(为了简单起见,我们把围墙看做一维的数轴,每一个单位长 ...
- Painting The Fence(贪心+优先队列)
Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...
- 【Codeforces 1132C】Painting the Fence
Codeforces 1132 C 题意:给一些区间\([l_i,r_i]\),从中删掉两个,求剩下的区间最多能够覆盖的格子数量. 思路:首先枚举第一个删掉的区间,然后我们可以通过差分来求出每个格子被 ...
- [Codeforces 448C]Painting Fence
Description Bizon the Champion isn't just attentive, he also is very hardworking. Bizon the Champion ...
- codeforces C. Painting Fence
http://codeforces.com/contest/448/problem/C 题意:给你n宽度为1,高度为ai的木板,然后用刷子刷颜色,可以横着刷.刷着刷,问最少刷多少次可以全部刷上颜色. ...
- Educational Codeforces Round 61 Editorial--C. Painting the Fence
https://codeforces.com/contest/1132/problem/C 采用逆向思维,要求最大的覆盖,就先求出总的覆盖,然后减去删除两个人贡献最少的人 #include<io ...
随机推荐
- hive中使用rcfile
(1)建student & student1 表:(hive 托管)create table student(id INT, age INT, name STRING)partitioned ...
- 如何解决mosh中翻页只能查看一屏的问题
最近用mosh替换了ssh作为连接开发机的工具,发现另外一个问题,ls cat随便什么命令输出结果超过一行的,向上翻页就没有了,找了下官网的FAQ也提到了这个问题,目前解决方案是使用tmux或者scr ...
- Oracle之视图
Oracle之视图 2018.9.12 由于视图的数据与表数据互相关联,所以切记谨慎操作 建立视图 使用下面sql语句来完成视图的创建 create or replace view 视图名 as se ...
- Rman 管理 archivelog 的命令
因为archivelog的相关信息是记录在controlfile中的,当物理删除后不会改变controlfile的设置.并且在查询相关的动态视图(例如v$archived_log)时,该部分日志仍然标 ...
- SQL、T-SQL与PL-SQL的区别
SQL.T-SQL与PL-SQL的区别 SQL是Structrued Query Language的缩写,即结构化查询语言.它是负责与ANSI(美国国家标准学会)维护的数据库交互的标准.作为关系数据库 ...
- window.location.href 跳转无历史记录
需求:从页面a单点登录跳至页面b,在页面b里做判断符合条件后location.href至c页面 问题:在页面c中点击返回按钮页面回到了a,正常情况下应该回到页面b 原因:在当前页面的 onload 事 ...
- 初涉基环外向树dp&&bzoj1040: [ZJOI2008]骑士
基环外向树dp竟然如此简单…… Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发 ...
- <CPP学习>第一天 第一个CPP程序 hello word
由于我是计算机类嵌入式专业的大一学生,之前一直使用的是生万物的C语言,了解了其过程性语言的特性及其基础语法,在大一下学期期末阶段想自学一下C++,其实在开学初就买了一本C++ Primer,但由于各种 ...
- Maria-DB
mysql客户端可用选项: -A, --no-auto-rehash 禁止补全 -u, --user= 用户名,默认为root -h, --host= 服务器主机,默认为localhost -p, - ...
- Win10家庭版卸载Mysql 8.0.13实录
因为重度嫌弃Mysql 8.0.xxx的各种妖魔鬼怪,所以想卸载了.但是,百度了很多文章,日期也是近几个月,但是却并不适用.所以特写此文记录一下. 按照百度万金油通用第一步,就是要停止MySQL的服务 ...