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相关推荐

  1. [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup

    1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 697  Solved: 463 ...

  2. bzoj 1637: [Usaco2007 Mar]Balanced Lineup

    1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 689  Solved: 456 ...

  3. 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存每个 ...

  4. 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:  ...

  5. bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队【st表||线段树】

    要求区间取min和max,可以用st表或线段树维护 st表 #include<iostream> #include<cstdio> using namespace std; c ...

  6. bzoj1699[Usaco2007 Jan]Balanced Lineup排队

    Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置 ...

  7. 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 510   ...

  8. bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 821   ...

  9. 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 ...

最新文章

  1. 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?
  2. 设计模式 2014-12-19
  3. swoole 使用 xdebug 实现调试模式(PHPSTORM)
  4. Markdown基本语法【转】
  5. msfvenom生成木马和内网穿透
  6. Spring Cloud Gateway 源码解析(2) —— 路由
  7. JAVA基础之容器基础内容
  8. AGP与PCI-E的区别和PCI-E接口与PCI接口的区别
  9. mysql中的found_MySQL 中的 FOUND_ROWS() 与 ROW_COUNT() 函数
  10. 进程管理工具   htop
  11. 存量电力系统_RCR新文:中国电力基础设施发展的物质存量和流量
  12. CoreMotion 框架
  13. 用UIWebView加载本地图片和gif图
  14. WiFi 桥接功能 — 基于Linux路由器
  15. 修改图片exif信息
  16. html动态工艺流程,化工工艺动态流程图制作软件
  17. python 密码库_(01)Python密码库Cryptography探究学习---简介和入门
  18. Angular Router的组件路由介绍
  19. 秋招总结帖,还愿牛客
  20. 自然语言处理技术之词嵌入方法-2

热门文章

  1. 【Linux】一步一步学Linux——yes命令(248)
  2. 【Linux】Linux用户、用户组、文件权限学习笔记
  3. python自动上传图片_使用Python实现一个简单的图片上传存储服务
  4. android 定时器5秒执行一次,如何在android中每30秒执行一次查询?
  5. HTML输入学生成绩并排序java_JS实现冒泡排序,插入排序和快速排序并排序输出...
  6. java中ftp删除文件,Java 实现ftp 文件上传、下载和删除
  7. python 字符编码
  8. python常见的文件操作:打开、创建等
  9. Python报错TypeError: ‘User‘ object is not iterable
  10. android连接usb后默认app,android – 记住USB连接,但不要启动应用程序