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 ...
随机推荐
- Android学习笔记_29_样式和主题
一.简单样式定义和使用: android中的样式和CSS样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view控件属性的集合.如:需要定义字体的颜色和大小. 在Android中 ...
- SqlSugar之SqlQueryDynamic返回值处理
现在有个需求,有一张表每个月表名都会变的,但结构是一样的,我们不能再用类映射来完成的,我不能每个月都去手动添加,我们只能使用sql语句来完成这个需求.为了方便我这边选择的是SqlQueryDynami ...
- AngularJS 四 服务
AngularJS服务: API: https://docs.angularjs.org/api/ng/service 下面只会介绍几种,需要的话可以去官网查看 AngularJS服务 ...
- 菜鸟笔记 -- Chapter 4 Java语言基础
在Chapter3中我们写了第一个Java程序Hello World,并且对此程序进行了分析和常见错误解析.那么我们有没有认真观察一下Java程序的基本结构呢?本节我就来聊一下Java程序的基本结构( ...
- Oracle递归 start with...connect by...prior
prior一侧是父节点 另一侧是子节点 --查询region_id等于4519的节点下面的所有子节点 查找出给定节点的所有子节点 SELECT sr.* FROM spc_region sr wher ...
- ios应用数据存储方式(偏好设置)-转
一.简单介绍 1.很多ios应用都支持偏好设置,比如保存用户名,密码,字体大小等设置,ios提供了一套标准的解决方案来为应用加入偏好设置功能. 2.每个应用都有个NSUserDefaults实例,通过 ...
- iOS自动打开闪光灯
现在好多应有都具备扫码功能,为了减少用户操作,一般会在光线比较暗的时候,自动打开闪光灯: 1.导入头文件 #import <AVFoundation/AVFoundation.h> #im ...
- 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)-B-杨老师游戏
题目链接:杨老师游戏 题目分析:将9个数字分成3块,分块枚举,话句话说,9个数字的所有排列组合,如果满足N=a*b-c就是一个答案,暴力枚举Orz. 代码如下: #include<iostre ...
- 【2017 ICPC亚洲区域赛沈阳站 K】Rabbits(思维)
Problem Description Here N (N ≥ 3) rabbits are playing by the river. They are playing on a number li ...
- POJ2406 Power Strings(KMP)
Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 56162 Accepted: 23370 Description Giv ...