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]内最长 ...
随机推荐
- RAW模板命名规范
国有国法,家有家规,任何一种开发都要有自己规范,RAW模板也一样,这个文章来介绍一下RAW模板命名的规范. 格式: 开发者或组织_描述词_名称 开发者或组织:如know或自己的组织名 描述词:c-&g ...
- QT实现,通过URL下载文件的接口实现
今天来把坑填上. 具体就是提供一个URL,并通过这个URL下载文件. MyDownloader.h: #ifndef MYDOWNLOADER_H #define MYDOWNLOADER_H cla ...
- 在cnblog中使用syntax方法
<pre name="code" class="brush: cpp;"> 代码 </pre> #include<cstdio&g ...
- Android Animations动画使用详解
一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...
- android下文件下载
public static void downFile(final String url){ new Thread(){ public void run(){ FileOutputStream os= ...
- linux 进程间信号量管理程序之sem_timedwait使用
在开发过程中,有三个独立执行的程序模块,三个模块都对sqlite数据库进行读写操作.sqlite在linux共享性较差,所以须要增加相互排斥信号量解决三个模块訪问数据库该问题. 另外,在增加信号量后, ...
- Andriod之Activity
eclipse还原默认的面板设计:Window > Reset Perspective> OK1\ 1.多个Activity之间的关系: 2.Intent的基本作用: 3.在一个Activ ...
- 你能相信吗?这些都是由一个DIV元素实现的动画,纯CSS3技术
http://www.webhek.com/misc/css-loaders
- java执行windows 的cmd 命令
//获取运行时 Runtime rt = Runtime.getRuntime(); //获取进程 Process p = rt.exec(String[] cmdarray); 或者 P ...
- Python网络编程——设备名和IPv4地址
1.快速查看主机名和对应的IP地址小程序 import socket def print_machine_info(): # 定义print_machine_info()类 host_name = s ...