【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup
Description
Farmer John 决定给他的奶牛们照一张合影,他让 N (1 ≤ N ≤ 50,000) 头奶牛站成一条直线,每头牛都有它的坐标(范围: 0..1,000,000,000)和种族(0或1)。 一直以来 Farmer John 总是喜欢做一些非凡的事,当然这次照相也不例外。他只给一部分牛照相,并且这一组牛的阵容必须是“平衡的”。平衡的阵容,指的是在一组牛中,种族0和种族1的牛的数量相等。 请算出最广阔的区间,使这个区间内的牛阵容平衡。区间的大小为区间内最右边的牛的坐标减去最做边的牛的坐标。 输入中,每个种族至少有一头牛,没有两头牛的坐标相同。
Solution
设s[i]为前i头牛为1的牛数-为0的牛数
显然对于合法区间(l,r],s[l]==s[r]
扫一遍对于每个s统计下最左和最右就行了
秒之
Code
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=1e5+5; 5 6 struct cow{ 7 int dfn,dis; 8 bool operator<(const cow&b) 9 const{return dis<b.dis;} 10 }a[maxn]; 11 int s[maxn],l[maxn],r[maxn]; 12 int n; 13 14 int main(){ 15 scanf("%d",&n); 16 for(int i=1;i<=n;i++) 17 scanf("%d%d",&a[i].dfn,&a[i].dis); 18 sort(a+1,a+n+1); 19 20 for(int i=1;i<=n;i++){ 21 if(a[i].dfn) s[i]=s[i-1]+1; 22 else s[i]=s[i-1]-1; 23 int x=s[i]+n; 24 if(!l[x]) l[x]=i; 25 else r[x]=i; 26 } 27 28 int ans=0; 29 for(int i=0;i<=2*n;i++) 30 if(l[i]&&r[i]) ans=max(ans,a[r[i]].dis-a[l[i]+1].dis); 31 printf("%d\n",ans); 32 return 0; 33 }
转载于:https://www.cnblogs.com/xkui/p/4562402.html
【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup相关推荐
- [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup
1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec Memory Limit: 64 MB Submit: 697 Solved: 463 ...
- bzoj 1637: [Usaco2007 Mar]Balanced Lineup
1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec Memory Limit: 64 MB Submit: 689 Solved: 456 ...
- bzoj 1637: [Usaco2007 Mar]Balanced Lineup【瞎搞】
我是怎么想出来的-- 把种族为0的都变成-1,按位置x排升序之后,s[i]表示种族前缀和,想要取(l,r)的话就要\( s[r]-s[l-1]==0 s[r]==s[l-1] \),用一个map存每个 ...
- bzoj 1636 bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队(RMQ)
1699: [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1514 Solved: ...
- bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队【st表||线段树】
要求区间取min和max,可以用st表或线段树维护 st表 #include<iostream> #include<cstdio> using namespace std; c ...
- bzoj1699[Usaco2007 Jan]Balanced Lineup排队
Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置 ...
- 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 510 ...
- bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 821 ...
- poj 3264 Balanced Lineup RMQ问题 线段树
For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...
最新文章
- 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?
- 设计模式 2014-12-19
- swoole 使用 xdebug 实现调试模式(PHPSTORM)
- Markdown基本语法【转】
- msfvenom生成木马和内网穿透
- Spring Cloud Gateway 源码解析(2) —— 路由
- JAVA基础之容器基础内容
- AGP与PCI-E的区别和PCI-E接口与PCI接口的区别
- mysql中的found_MySQL 中的 FOUND_ROWS() 与 ROW_COUNT() 函数
- 进程管理工具 htop
- 存量电力系统_RCR新文:中国电力基础设施发展的物质存量和流量
- CoreMotion 框架
- 用UIWebView加载本地图片和gif图
- WiFi 桥接功能 — 基于Linux路由器
- 修改图片exif信息
- html动态工艺流程,化工工艺动态流程图制作软件
- python 密码库_(01)Python密码库Cryptography探究学习---简介和入门
- Angular Router的组件路由介绍
- 秋招总结帖,还愿牛客
- 自然语言处理技术之词嵌入方法-2
热门文章
- 【Linux】一步一步学Linux——yes命令(248)
- 【Linux】Linux用户、用户组、文件权限学习笔记
- python自动上传图片_使用Python实现一个简单的图片上传存储服务
- android 定时器5秒执行一次,如何在android中每30秒执行一次查询?
- HTML输入学生成绩并排序java_JS实现冒泡排序,插入排序和快速排序并排序输出...
- java中ftp删除文件,Java 实现ftp 文件上传、下载和删除
- python 字符编码
- python常见的文件操作:打开、创建等
- Python报错TypeError: ‘User‘ object is not iterable
- android连接usb后默认app,android – 记住USB连接,但不要启动应用程序