bzoj 3190 维护栈
我们可以将每一辆赛车看成一条直线,斜率为速度,纵截距为初始位置,那么问题就转化为求这n条直线处于最上面的直线。最上面是指在坐标系中,假设从x轴向下看,能看到的直线,只露一个点也算能看见。那么就类似水平可见直线这道题了。先按照斜率排序,然后维护直线的栈就行了。
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/
//By BLADEVIL
var
n :longint;
a, b, num :array[..] of longint;
quea, queb :array[..] of longint;
tot :longint;
quex :array[..] of double;
ans :array[..] of longint;
i, j :longint;
flag :array[..] of boolean;
maxi :longint;
procedure swap(var a,b:longint);
var
c :longint;
begin
c:=a; a:=b; b:=c;
end;
procedure qs(low,high:longint);
var
i, j, xx, yy :longint;
begin
i:=low; j:=high; xx:=a[(i+j) div ];
yy:=b[(i+j) div ];
while i<j do
begin
while (a[i]<xx) or (a[i]=xx) and (b[i]>yy) do inc(i);
while (a[j]>xx) or (a[j]=xx) and (b[j]<yy) do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
swap(b[i],b[j]);
swap(num[i],num[j]);
inc(i); dec(j);
end;
end;
if i<high then qs(i,high);
if j>low then qs(low,j);
end;
procedure insert(i:longint);
var
k :longint;
x :double;
begin
if a[i]=quea[tot] then exit;
if tot> then
begin
x:=(queb[tot-]-b[i])/(a[i]-quea[tot-]);
while (tot>) and (x<quex[tot]) do
begin
dec(tot);
x:=(queb[tot-]-b[i])/(a[i]-quea[tot-]);
end;
end;
inc(tot);
quea[tot]:=a[i];
queb[tot]:=b[i];
quex[tot]:=(queb[tot-]-b[i])/(a[i]-quea[tot-]);
ans[tot]:=num[i];
end;
begin
read(n);
for i:= to n do read(b[i]);
for i:= to n do read(a[i]);
maxi:=;
for i:= to n do if b[i]>b[maxi] then maxi:=i;
flag[maxi]:=true;
for i:= to n do if b[i]=b[maxi] then flag[i]:=true;
for i:= to n do num[i]:=i;
qs(,n);
quea[]:=a[]; queb[]:=b[];
quex[]:=-maxlongint; ans[]:=num[];
tot:=;
for i:= to n do insert(i);
for i:= to tot do if quex[i]>= then break;
for j:=i to tot do flag[ans[j]]:=true;
qs(,n);
for i:= to n do
if flag[i] then
begin
j:=i-;
while (a[j]=a[i]) and (b[j]=b[i]) do
begin
flag[j]:=true;
dec(j);
end;
j:=i+;
while (a[j]=a[i]) and (b[j]=b[i]) do
begin
flag[j]:=true;
inc(j);
end;
end;
tot:=;
for i:= to n do if flag[i] then inc(tot);
writeln(tot);
for i:= to n do if flag[i] then break;
write(i);
for j:=i+ to n do if flag[j] then write(' ',j);
writeln;
end.
bzoj 3190 维护栈的更多相关文章
- BZOJ 3190 赛车 | 计算几何
BZOJ 3190 赛车 题面 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位置.比赛开始后,车辆gi将会以 ...
- flask上下文管理相关-LocalStack 对象维护栈
LocalStack 对象维护栈 模拟 import threading """ storage = { 1232: {stack:[123,456]} } " ...
- 【BZOJ 3190】 3190: [JLOI2013]赛车 (半平面交)
3190: [JLOI2013]赛车 Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位 ...
- bzoj 1057 单调栈
首先我们可以枚举每个一点,然后向下一直拓展到不能拓展为止,然后向下拓展的同时我们可以算出来向左最多拓展的个数,用单调栈来维护一个上升的序列,这样就类似与悬线法找最大01子矩阵了,但是对于这题01交替来 ...
- [BZOJ 1500] 维护序列
Link: BZOJ 1500 传送门 Solution: 可能平衡树维护序列的所有操作都在这了吧…… 对序列的维护$fhq treap$和$Splay$都能做 有几个注意点: 1.维护序列时始终记得 ...
- [USACO06NOV]糟糕的一天Bad Hair Day BZOJ 1660 单调栈
农民John的某 N 头奶牛 (1 <= N <= 80,000) 正在过乱头发节!由于每头牛都 意识到自己凌乱不堪的发型, FJ 希望统计出能够看到其他牛的头发的牛的数量. 每一头牛 i ...
- HDU 4699 Editor 维护栈
维护两个栈,分别存光标前和光标后的数 再维护前缀和的栈 和 前缀和最大值的栈 注意一下左移,右移,删除到顶了就不操作了 5个操作 I x : 光标处插入x -----> s1.push(x) ...
- bzoj 1012 维护一个单调数列
Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...
- Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 578 Solved: 247[Submit][Status][Discuss] ...
随机推荐
- 【连载】Maven系列(四)——配置私服
相关文章 1.<用起来超爽的Maven——入门篇> 2.<用起来超爽的Maven——进阶篇> 3.<Maven系列(三) 进阶> 一.为什么需要私服 有些公司并不提 ...
- android activity状态保存
一.被其他任务打断(来电话),再次打开希望保留数据 private String SAVE_INSTANCE_TAG = "ATWAL"; @Override protected ...
- Scala学习笔记(二):运行脚本文件
在某个目录(如:F:\)下新建一个文本文件,命名为:hello.scala 其内容为: println("Hello World!") 那么这个时候该怎么运行这个脚本文件呢? 通过 ...
- C++学习011-常用内存分配及释放函数
C++用有多种方法来分配及释放内存,下面是一些经常使用的内存分配及释放函数 现在我还是一个技术小白,一般用到也指示 new+delete 和 malloc和free 其他的也是在学习中看到,下面的文字 ...
- centos7用yum搭建LAMP环境
用yum快速搭建LAMP平台 实验环境: [root@nmserver- html]# cat /etc/redhat-release CentOS release (AltArch) [root@n ...
- coia阻止事件上浮
1.阻止事件上浮 选择默认地址li 时 选中整个div使其为默认地址 此时点击编辑按钮也会触发选中默认事件 为事件添加event.stopPropagation();阻止事件上浮 2.js给页面inp ...
- Spark性能超过Hadoop百倍
Spark在偷换概念,Hadoop跑硬盘,Spark跑内存,地球人都知道,内存的速度可是远超硬盘一个量级,超过100倍又有什么奇怪的.如果要比,咱们都拿硬盘来跑跑看!
- NO1——线段树
/* 数组存储 */ /* 预处理 */ #include <iostream> #include <cstdio> #include <algorithm> #i ...
- VirtualBox上安装ubuntu
当安装完成,重启后,在启动界面出现Please remove the installation medium,then press ENTER.问题? 解决方法:在VirtualBox里面通过iso文 ...
- Android Studio 添加模块依赖
原文地址: http://fanjiajia.cn/2018/09/27/Android%20Studio%20%E6%B7%BB%E5%8A%A0%E6%A8%A1%E5%9D%97%E4%BE%9 ...