最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

信息学奥赛题库- 爬山

C++ 少儿编程 1286浏览 0评论

友情提示:380元/半年,儿童学编程,就上码丁实验室

【题目描述】

给出一些山顶的坐标($x_i,y_i$),我们认为山是这些山顶构成的一段折线$l$。

每到一个山顶以后,你会左右张望找到能看到的最高的山顶(一个山顶$P$能被他们看到当且仅当连接你与$P$的线段与$l$只在你和$P$上相交),并向到目前为止你看到过的最高的山顶那个方向继续前进(爬到左边相邻的一个山顶或右边相邻的一个山顶)。

爬到最高的山顶后你会停下来。

对于每个山顶,求出若你选择此处作为爬山起点的话,你会爬过几个山顶(经过多次算多次)。

注意:$y$坐标相同情况下选取$x$坐标最大的为最高山顶。

【输入】

第一行一个整数$n$表示山顶的数量。

接下来的$n$行,每行两个整数$x_i,y_i$。保证$x_i$单调递增。

【输出】

$n$行,每行一个整数表示从($x_i,y_i$)出发的答案。

【输入样例】

4
0 10
1 5
2 0
3 6

【输出样例】

0
1
4
3

【提示】

【数据规模】

对于30%的数据,$n≤100$。

对于60%的数据,$n≤5×10^4$。

对于100%的数据,$1≤n≤5×10^5,0≤x_i,y_i≤10^6$。

您必须 登录 才能发表评论!