題意:
指的是海象進行排隊,但是他們會因為年齡有不愉快的程度。題目**:如果是年輕的海象比他靠前他就會產生不愉快的程度,距離越遠不愉快的程度越大。
輸出不愉快的程度,如果沒有不愉快則輸出-1.
#include
#include
#include
#define m 100010
using
namespace std;
int a[m]
,tail,ans[m]
;struct node
;//用x代表年齡,i代表位置即下標
node q[m]
;int
erfen
(int x)
//二分法的方法對其中一部分的查詢
else
}return l;
}int
main()
for(
int i=n;i>
0;i--
)else
}for
(int i=
1;i)printf
("%d\n"
,ans[n]);
}}
題意:
題目**:
官方**:
官方**中運用的vector的語法,帶有二分法的感覺
#include
using
namespace std;
intmain()
vector<
int>
ans(
3* n)
; vector<
int> st_max;
vector<
int> st_min;
for(
int i =
3* n -
1; i >=
0; i--
)while
(!st_min.
empty()
&& a[st_min.
back()
]> a[i]
)int low =
0, high =
(int
) st_min.
size()
;while
(low < high)
else
}int nxt =
3* n;
if(low >0)
if(!st_max.
empty()
)if(nxt <
3* n && a[nxt]
>= a[i]
)else
st_min.
push_back
(i);
st_max.
push_back
(i);
}for
(int i =
0; i < n; i++
) cout <<
(ans[i]==3
* n ?-1
: ans[i]
- i);}
cout <<
'\n'
;return0;
}
#include
using
namespace std;
int a[
300005
],q[
300005];
int ans[
100005];
intmain()
int r =1;
for(
int i =
1; i <= n; i++)if
( r >
3* n ) ans[i]=-
1;else ans[i]
= r - i;
}for
(int i =
1; i <= n; i++
)return0;
}
單調棧,單調佇列
大多數借鑑了 單調佇列是什麼呢?可以直接從問題開始來展開。poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 n 106,m n 我們知道,解法 在暴力列舉的過程中,有乙個地方是重複比較了,就是在找當前的f i 的時候,i的前面其它m 1個數在算f i 1 ...
單調棧 單調佇列
單調棧 單調佇列是在棧和佇列的基礎上加上單調結構的資料結構。如果乙個元素入棧或入隊,他會檢查之前的元素,如果之前的元素不可能是答案的解,那麼就彈出元素,使得當前元素入棧或入隊。leetcode 239 滑動視窗最大值 此題是單調佇列,每次遇到乙個元素,一直從隊尾彈出,直到隊尾元素大於該元素為止。還需...
單調棧 單調佇列
啊學完了來寫個總結吧 顧名思義,單調,就是指色彩單一某乙個容器裡面的元素都是遞增或遞減的,而單調棧和單調佇列就是這個容器。單調棧 單調棧模板 其他的我就不說了,講下為什麼單調棧是從後往前掃瞄 當我們在判斷乙個數後面第乙個比它大的數時,前提是後面的數已經被處理了,所以我們要從後往前掃瞄。我做了兩種做法...