USACO Milk2 区间合并
这题WA了四次,后来发现不能用所谓的桶排来写
虽然空间上是可以的,但是存在这样一个问题
比如两组数据[15,20]和[21,30]
在20 和 21这两个时刻之间没有milking,但是用桶排的方法写的话只能判断离散的量
不能判断连续的量。
所以这题应该要用【区间合并】的思想来写
不错的题目~
Souce code:
/*
ID: wushuai2
PROG: milk2
LANG: C++
*/
//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define ll long long
#define Max(a,b) (((a) > (b)) ? (a) : (b))
#define Min(a,b) (((a) < (b)) ? (a) : (b))
#define Abs(x) (((x) > 0) ? (x) : (-(x))) using namespace std;
const int INF = 0x3f3f3f3f; struct sc{
int s,e;
}a[]; bool cmp(struct sc a, struct sc b){
if(a.s != b.s){
return a.s < b.s;
} else{
return a.e > b.e;
}
} int main() {
ofstream fout ("milk2.out");
ifstream fin ("milk2.in");
int i, j, k, t, n, m;
int ans1 = , ans2 = ;
fin >> n;
for(i = ; i < n; ++i){
fin >> a[i].s >> a[i].e;
}
sort(a, a + n, cmp);
for(i = ; i < n - ; ++i){
if(a[i].s == a[i + ].s){
for(j = i + ; j < n - ; ++j){
a[j] = a[j + ];
}
--n;
}
}
for(i = ; i < n - ; ++i){
if(a[i].e >= a[i + ].s){
a[i].e = max(a[i].e, a[i + ].e);
for(j = i + ; j < n - ; ++j){
a[j] = a[j + ];
}
--n;
--i;
}
}
for(i = ; i < n; ++i){
if(a[i].e - a[i].s > ans1){
ans1 = a[i].e - a[i].s;
}
if(i < n - && a[i + ].s - a[i].e > ans2){
ans2 = a[i + ].s - a[i].e;
}
}
fout << ans1 << ' ' << ans2 << endl;
return ;
}
USACO Milk2 区间合并的更多相关文章
- POJ 3667 Hotel(线段树 区间合并)
Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...
- HDU 3911 线段树区间合并、异或取反操作
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...
- HDU 1540 Tunnel Warfare 平衡树 / 线段树:单点更新,区间合并
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Lim ...
- HDU 3911 Black And White(线段树区间合并+lazy操作)
开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...
- POJ 2750 Potted Flower (线段树区间合并)
开始懵逼找不到解法,看了网上大牛们的题解才发现是区间合并... 给你n个数形成一个数列环,然后每次进行一个点的修改,并输出这个数列的最大区间和(注意是环,并且区间最大只有n-1个数) 其实只需要维护 ...
- ACM: Hotel 解题报告 - 线段树-区间合并
Hotel Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Description The ...
- HDU 1540 Tunnel Warfare(线段树+区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目大意:抗日战争期间进行地道战,存在n个村庄用地道连接,输入D表示破坏某个村庄(摧毁与其相连的地道, 包 ...
- POJ 2892 Tunnel Warfare(线段树单点更新区间合并)
Tunnel Warfare Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7876 Accepted: 3259 D ...
- [HDOJ3308]LCIS(线段树,区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题意:给定n个数,两个操作: U A B:将位置A的数值改成B Q A B:查询[A,B]内最长 ...
随机推荐
- PhoneGap笔记-01 基本使用
1. 环境配置 1.1 常用框架 jQuery Backbone.js dojo bootstrap kendo UI Sencha jQuery Mobile PhoneJS AngularJS I ...
- IOS 表视图(UITableVIew)的使用方法(7)表视图的编辑功能(拖拉调整排序位置)
除了每个单元行左边的删除和新增图标,UITableView还支持在单元行的右侧显示一个供用户拖拉调整排序位置的控件. 不过如果要显示此控件,UITableView的数据源需要实现以下的方法. -(vo ...
- 为什么要用on()而不直接使用click
为什么要用on()而不直接使用clickhttp://stackoverflow.com/questions/10082031/why-use-jquery-on-instead-of-clickht ...
- jQuery json数据处理
一种是使用jQuery的ajax函数 另一种是使用getJSON函数 使用ajax函数的时候 对于返回值类型dataType 亲自指定为json格式 就无需自己手动处理格式 $.ajax({ url ...
- CI引入外部javascript和css
假定baseurl 为 $config['base_url']='http://localhost/codeigniter/'; 调用 <link rel="stylesheet&qu ...
- hdoj 3065 病毒侵袭持续中(AC自动机)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过 ...
- NeHe OpenGL lession 4
// lession4.c #include <OpenGL/OpenGL.h> #include <GLUT/GLUT.h> #include <stdio.h> ...
- redis研究笔记
本文链接:http://blog.csdn.net/u012150179/article/details/38077851 一. redis Redis is an in-memory databas ...
- ajax的简单操作
项目需要,简单研究了下ajax 需要在html中引入js文件 编写js函数 function testAjax() { $.ajax({ type: 'get', //请求方式 get/post ur ...
- 使用Groovy进行依赖注入
为什么选择Groovy? 传统的依赖注入是XML,对我而言,可读性太差,太不美观,强烈地想换一个方式进行依赖注入,Groovy作为XML的替代方案,在Spring4之后被引入,是基于JVM的一门方言, ...