多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > UVALive 6531 Go up the ultras 單調棧+RMQ

UVALive 6531 Go up the ultras 單調棧+RMQ

來源:程序員人生   發布時間:2014-12-05 09:04:10 閱讀次數:2147次

題目鏈接:點擊打開鏈接

題意:

給定n座山

下面n個數字表示n座山的高度


若這座山u合法,則要滿足:

1、若u的左側存在比u高的山,設v是u左側距離u最近的且嚴格比u高的山,在[v,u]之間最少有1座山x,使得x和u的高度差>=15000

2、右側也同理。

同時滿足1、2的情況則算合法。

問:

輸出所有合法的山。

思路:

求距離某個點最近的山就是保護1個單調棧,然后給山的高度求1個RMQ。

寫寫寫。。。

#pragma comment(linker, "/STACK:1024000000,1024000000") #include<bits/stdc++.h> template <class T> inline bool rd(T &ret) { char c; int sgn; if(c=getchar(),c==EOF) return 0; while(c!='-'&&(c<'0'||c>'9')) c=getchar(); sgn=(c=='-')?⑴:1; ret=(c=='-')?0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); ret*=sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if(x>9) pt(x/10); putchar(x%10+'0'); } using namespace std; typedef long long ll; const int N = 100050; int d[N*2][20]; void RMQ_init(int *A, int n) { for (int i = 1; i <= n; ++i) d[i][0] = A[i]; for (int j = 1; (1 << j) <= n; ++j) for (int i = 1; i + j - 1 <= n; ++i) { d[i][j] = min(d[i][j - 1], d[i + (1 << (j - 1))][j - 1]); } } int RMQ(int L, int R) { int k = 0; while ((1 << (k + 1)) <= R - L + 1) ++k; return min(d[L][k], d[R - (1 << k) + 1][k]); } int n, h[N], Stack[N], top; int lh[N], rh[N]; void work(){ for(int i = 1; i <= n; i++)rd(h[i]); top = 0; for(int i = 1; i <= n; i++) { while(top && h[ Stack[top⑴] ] <= h[i])top--; if(top) lh[i] = Stack[top⑴]; else lh[i] = 0; Stack[top++] = i; } top = 0; for(int i = n; i; i--){ while(top && h[ Stack[top⑴] ]<= h[i])top--; if(top) rh[i] = Stack[top⑴]; else rh[i] = 0; Stack[top++] = i; } } const int hehe = 150000; vector<int>ans; int main(){ while(cin>>n){ work(); RMQ_init(h, n); ans.clear(); for(int i =1; i <= n; i++){ if(lh[i] == 0 && rh[i] == 0) ans.push_back(i); else if(lh[i] == 0){ int v = RMQ(i, rh[i]); if(h[i] - v >= hehe) ans.push_back(i); } else if(rh[i] == 0){ int v = RMQ(lh[i], i); if(h[i] - v >= hehe) ans.push_back(i); } else { int u = RMQ(lh[i], i), v = RMQ(i, rh[i]); int maxx = max(u, v); if(h[i] - maxx >= hehe) ans.push_back(i); } } for(int i = 0; i < ans.size(); i++){ pt(ans[i]); if(i==ans.size()⑴)puts(""); else putchar(' '); } } return 0; }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 在线观看一区二区三区四区 | 亚洲国产精品成 | 波多野结衣 一区二区 | 免费叼嘿视频 | 美国一级毛片完整高清 | 无夜精品久久久久久 | 亚洲精品乱码久久久久久蜜桃欧美 | 日本a在线 | 欧美日韩国产亚洲综合不卡 | 国产无卡一级毛片aaa | 国产国拍亚洲精品av | 一区二区三区在线播放视频 | 最近免费字幕中文大全视频 | 中文字幕亚洲一区二区三区 | 欧美性猛交| 毛片大全网站 | 国产l精品国产亚洲区久久 国产mv在线观看 | 日韩性大片免费 | 国产精品一区二区久久精品涩爱 | 亚洲日韩第一页 | 国产日本韩国 | 日本一区免费看 | 欧美一级aa天码毛片 | 国产成人久久 | 午夜影院在线观看视频 | 一级做a爰片久久毛片欧美 一级做a爰片久久毛片人呢 | 亚洲一二区视频 | 免费毛片网站 | 一级做a爰片性色毛片刺激 一级做a爰片性色毛片黄书 | 国产女人伦码一区二区三区不卡 | 国产日韩欧美一区二区三区综合 | 中国精品18videosex性中国 | 毛片毛多| 国产成人看片免费视频观看 | 欧美九九视频 | 亚洲春色www| 欧美精欧美乱码一二三四区 | 国产高清在线播放免费观看 | 欧美日韩中文亚洲v在线综合 | 亚洲视频在线免费 | www.99爱|