AC日记——挤牛奶 洛谷 P1204
题目描述
三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒。第二个农民在700秒开始,在 1200秒结束。第三个农民在1500秒开始2100秒结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300秒到1200秒),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200秒到1500秒)。
你的任务是编一个程序,读入一个有N个农民(1 <= N <= 5000)挤N头牛的工作时间列表,计算以下两点(均以秒为单位):
最长至少有一人在挤奶的时间段。
最长的无人挤奶的时间段。(从有人挤奶开始算起)
输入输出格式
输入格式:
Line 1:
一个整数N。
Lines 2..N+1:
每行两个小于1000000的非负整数,表示一个农民的开始时刻与结束时刻。
输出格式:
一行,两个整数,即题目所要求的两个答案。
输入输出样例
3
300 1000
700 1200
1500 2100
900 300
说明
题目翻译来自NOCOW。
USACO Training Section 1.2
思路:
离线做法
线段树把所有的区间都给覆盖
然后转化成线性求最大区间
来,上代码:
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream> using namespace std; class T_tree {
public:
int l,r,mid; bool flag,dis; void flag_()
{
flag=true;
} void mid_()
{
mid=(l+r)>>;
} bool if_()
{
if(l==r) return true;
else return false;
}
};
class T_tree tree[*]; int n,maxn,do_l[],do_r[],cnt=; char Cget; bool result[]; inline void read_int(int &now_)
{
Cget=getchar();
while(Cget>''||Cget<'') Cget=getchar();
while(Cget<=''&&Cget>='')
{
now_=now_*+Cget-'';
Cget=getchar();
}
} void tree_build(int now,int l,int r)
{
tree[now].l=l,tree[now].r=r;
if(l==r)
{
tree[now].dis=true;
return ;
}
tree[now].mid_();
tree_build(now<<,l,tree[now].mid);
tree_build(now<<|,tree[now].mid+,r);
} inline void tree_down(int now)
{
if(tree[now].l==tree[now].r) return ;
tree[now<<].flag_();
tree[now<<].dis=false;
tree[now<<|].flag_();
tree[now<<|].dis=false;
} void tree_change(int now,int l,int r)
{
if(tree[now].l==l&&tree[now].r==r)
{
tree[now].dis=false;
tree[now].flag_();
return ;
}
if(tree[now].flag) tree_down(now);
if(r<=tree[now].mid) tree_change(now<<,l,r);
else if(l>tree[now].mid) tree_change(now<<|,l,r);
else
{
tree_change(now<<,l,tree[now].mid);
tree_change(now<<|,tree[now].mid+,r);
}
} void tree_result(int now)
{
if(tree[now].if_())
{
result[++cnt]=tree[now].dis;
return ;
}
if(tree[now].flag) tree_down(now);
tree_result(now<<);
tree_result(now<<|);
} int main()
{
read_int(n);
for(int i=;i<=n;i++)
{
read_int(do_l[i]);
read_int(do_r[i]);
maxn=max(maxn,do_r[i]);
}
tree_build(,,maxn);
for(int i=;i<=n;i++)
{
tree_change(,do_l[i]+,do_r[i]);
}
tree_result();
int max_t=,max_f=,max_tt;
for(int i=;i<=cnt;i++)
{
if(!result[i])
{
max_tt=;
for(int j=i+;j<=cnt;j++)
{
if(result[j]==result[j-]) max_tt++;
else
{
if(result[j-]) max_t=max(max_t,max_tt);
else max_f=max(max_f,max_tt);
max_tt=;
}
}
if(result[cnt]) max_t=max(max_t,max_tt);
else max_f=max(max_f,max_tt);
break;
}
}
printf("%d %d\n",max_f,max_t);
return ;
}
AC日记——挤牛奶 洛谷 P1204的更多相关文章
- AC日记——寻找道路 洛谷 P2296
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- AC日记——铺地毯 洛谷 P1003(水水水水水~)
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- AC日记——过河卒 洛谷 1002
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...
- AC日记——[SDOI2017]相关分析 洛谷 P3707
[SDOI2017]相关分析 思路: 裸线段树: (玄学ac): 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- AC日记——丢瓶盖 洛谷 P1316
题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出 ...
- AC日记——滑动窗口 洛谷 P1886
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- AC日记——信息传递 洛谷 P2661 (tarjan求环)
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- AC日记——积木大赛 洛谷 P1969
题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...
随机推荐
- Lind.DDD.Domain.IOwnerBehavor对实体的意义
回到目录 对于Lind.DDD架构,我之前写了不少文章,对于它的Domain模式也介绍了不少,像之前的IEntity,ILogicDeleteBehavor,IModifyBehavor,IStatu ...
- B-Tree索引在sqlserver和mysql中的应用
在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实并没有真正理解索引,也没有搞清楚索引为什么就能加快检索速度,以至于在实践中并不能很好的应用索引.事实上,索引是一种廉价而且十分有效的优化手 ...
- Ajax传递路径问题及解决
在使用Ajax的过程中,如果要通过JSON传递路径值到处理页面,可能会出现传值不正确.(李昌辉) 解决方法就是在传值之前将路径进行编码: JS中: encodeURIComponent(url); 在 ...
- 精心挑选10款优秀的 jQuery 图片左右滚动插件
在现代的网页设计中,图片和内容滑块是一种极为常见和重要的元素.你可以从头开始编写自己的滑动效果,但是这将浪费很多时间,因为网络上已经有众多的优秀的 jQuery 滑块插件.当然,如果要从大量的 jQu ...
- javascript实现下雪效果
原理: 1.js动态创建DIV,指定CLASS类设置不同的背景图样式显示不同的雪花效果. 2.js获取创建的DIV并改变其top属性值,当下落的高度大于屏幕高后删除该移动div 3.好像不够完善勿喷 ...
- 使用React制作一个可配置的页面生成器[0]
背景 上班两年多,终于来到一家互联网公司,告别之前的朝九晚六的腐败生活,开始了11116的码农之旅. 因为公司做的是直播相关的业务,所以伴随着直播,不定期的就会有运营活动-.- 但是这类活动留给码农的 ...
- 转发:Chrome 控制台console的用法
大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对co ...
- iOS之两个ImageView实现图片滚动
原创作者:codingZero 导语 在不少项目中,都会有图片轮播这个功能,现在网上关于图片轮播的框架层出不穷,千奇百怪,笔者根据自己的思路,用两个imageView也实现了图片轮播,这里说说笔者的主 ...
- sqlite 数据类型
title: SQLITE 数据类型date: 2015-11-20 20:30:52categories: IOS tags: sqlite数据类型 小小程序猿我的博客:http://daycodi ...
- Servlet的生命周期+实现方式
1.Servlet的生命周期: (1)被创建: 默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法. 一个 ...