bzoj3190: [JLOI2013]賽車(單調棧)
題目傳送門
。
解法:
跟水平可見直線很像啊。只不過這道題是從y軸開始的射線。
思路其實差不多。
單調棧維護下凸包。
先按照直線的k排序。
那麼進來之後t其他直線。
當前直線為i。棧頂直線為x。
如果i和x的交點在y軸左側。
那麼說明在起點之前x才能超過i。
那麼這是不合法的,所以把x踢掉。
然後剩下的就是水平可見直線了。
棧頂下一個元素為y。
如果i和x的交點在x和y交點的左邊的話。那麼x也要被踢掉
畫個圖一切都明白了。
最後棧裡剩下的就是答案。
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
struct node {int k,b,id;}a[51000];
int f[51000],top;const double esp=1e-8;
double jd(node a,node b) {return (double)(b.b-a.b)/(a.k-b.k);}
bool cmp(node n1,node n2) {if(n1.k!=n2.k)return n1.k<n2.k;else return n1.b<n2.b;}
bool cmp1(int n1,int n2) {return a[n1].id<a[n2].id;}int ans[11000];
int main() {
int n;scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i].b);
for(int i=1;i<=n;i++)scanf("%d",&a[i].k);
for(int i=1;i<=n;i++) a[i].id=i;
sort(a+1,a+1+n,cmp);top=0;
for(int i=1;i<=n;i++){
while(top>=1&&(a[i].b>a[f[top]].b ||
jd(a[i],a[f[top]])<jd(a[f[top]],a[f[top-1]]) ))top--;
f[++top]=i;
}
printf("%d\n",top);sort(f+1,f+1+top,cmp1);
printf("%d",a[f[1]].id);
for(int i=2;i<=top;i++)printf(" %d",a[f[i]].id);
return 0;
}
相關文章
- 單調棧/單調佇列佇列
- 單調棧 和 單調佇列佇列
- 單調棧和單調佇列佇列
- 單調棧模板
- 淺談單調棧
- 單調棧學習小思考
- 演算法之單調棧演算法
- 聯賽模擬測試18 A. 施工 單調佇列(棧)優化DP佇列優化
- [JSOI2008] 最大數 (單調棧)JS
- HISTOGRA - 最大矩形面積(單調棧)
- 特殊資料結構:單調棧資料結構
- 【筆記】線段維護單調棧筆記
- 單調棧進階-接雨水-最大矩形
- Leetcode:單調棧_可見山峰問題LeetCode
- LeetCode Monotone Stack Summary 單調棧小結LeetCodeMono
- I - Max answer 計蒜客 - 38228 單調棧
- Largest Submatrix of All 1’s(思維+單調棧)
- LeetCode 周賽上分之旅 #47 前字尾分解結合單調棧的貢獻問題LeetCode
- 第十章 單調棧 Part2
- Leetcode321. 拼接最大數——單調棧的使用LeetCode
- codeforce 686div3 F Array Partition單調棧
- Codeforces #123D: 字尾陣列+單調棧3D陣列
- bzoj1113: [Poi2008]海報PLA(單調棧)
- 9.6-小訓練 三分小板子+單調棧
- bzoj1345: [Baltic2007]序列問題Sequence(單調棧)
- HNOI2016序列+資料加強版(字首和+單調棧)
- bzoj1007: [HNOI2008]水平可見直線(單調棧)
- 「面向 offer 學演算法」筆面試大殺器 -- 單調棧演算法面試
- 數字右邊第一個大於它的數(單調棧)
- ABC372D ABC379F 題解 單調棧二分
- P1295 [TJOI2011]書架 線段樹優化dp,單調棧優化
- kuangbin 專題二十三:二分 尺取 單調棧佇列 String佇列
- 線段樹維護單調棧——區間查詢版本 & 維護遞減序列
- 棧_單向連結串列
- Macos賽車競速遊戲:art of rally拉力賽車 for Mac 最新中文版Mac遊戲
- Arduino調整小車速度UI
- 分享一個簡單但挺有意思的演算法題2-貪心-單調棧-動態規劃演算法動態規劃
- 單調佇列佇列