單調棧給定乙個長度為 n 的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出 -1。
輸入格式
第一行包含整數 n,表示數列長度。輸出格式第二行包含 n 個整數,表示整數數列。
共一行,包含 n 個整數,其中第 i 個數表示第 i 個數的左邊第乙個比它小的數,如果不存在則輸出 -1。資料範圍
1 ≤ n ≤ 105輸入樣例:1 ≤ 數列中元素 ≤ 109
5輸出樣例:3 4 2 7 5
-1 3 -1 2 2
#include
using
namespace std;
const
int n =
1e5+10;
int stu[n]
, tt;
intmain()
return0;
}
單調佇列滑動視窗
給定乙個大小為 n ≤ 106的陣列。
有乙個大小為 k 的滑動視窗,它從陣列的最左邊移動到最右邊。
您只能在視窗中看到 k 個數字。
每次滑動視窗向右移動乙個位置。
以下是乙個例子:
該陣列為[1 3 -1 -3 5 3 6 7],k為3。
視窗位置
最小值最大值
[1 3 -1] -3 5 3 6 7-13
1 [3 -1 -3] 5 3 6 7-33
1 3 [-1 -3 5] 3 6 7-35
1 3 -1 [-3 5 3] 6 7-35
1 3 -1 -3 [5 3 6] 736
1 3 -1 -3 5 [3 6 7]37
您的任務是確定滑動視窗位於每個位置時,視窗中的最大值和最小值。
輸入格式
輸入包含兩行。輸出格式第一行包含兩個整數n和k,分別代表陣列長度和滑動視窗的長度。
第二行有n個整數,代表陣列的具體數值。
同行資料之間用空格隔開。
輸出包含兩個。輸入樣例:第一行輸出,從左至右,每個位置滑動視窗中的最小值。
第二行輸出,從左至右,每個位置滑動視窗中的最大值。
8 3輸出樣例:1 3 -1 -3 5 3 6 7
-1 -3 -3 -3 3 33 3 5 5 6 7
#include
using
namespace std;
const
int n =
1000010
;int a[n]
, q[n]
;int
main()
puts(""
);hh =
0, tt =-1
;for
(int i =
0; i < n; i ++
)puts(""
);return0;
}
kmp字串
看這裡
trie字串統計
維護乙個字串集合,支援兩種操作:
「i x」向集合中插入乙個字串x;
「q x」詢問乙個字串在集合**現了多少次。
共有 n 個操作,輸入的字串總長度不超過 105,字串僅包含小寫英文本母。
輸入格式
第一行包含整數 n,表示運算元。輸出格式接下來 n 行,每行包含乙個操作指令,指令為 」i x」 或 」q x」 中的一種。
對於每個詢問指令 」q x」,都要輸出乙個整數作為結果,表示 x 在集合**現的次數。資料範圍每個結果佔一行。
1 ≤ n ≤ 2∗104輸入樣例:
5輸出樣例:i abc
q abc
q ab
i ab
q ab
101
#include
using
namespace std;
const
int n =
1e5+10;
int son[n][26
];int cnt[n]
, idx;
char str[n]
;void
insert
(char str)
// 此時的p就是str中最後乙個字元對應的trie樹的位置idx
cnt[p]++;
//計數
}int
query
(char str)
return cnt[p];}
intmain()
return0;
}
資料結構 二 演算法
演算法 是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作 輸入輸出 演算法具有零個或多個輸入。演算法至少有乙個或多個輸出 有窮性 在可接受的時間範圍內結束,不會出現出現迴圈 確定性 不會出現二義性 可行性 每一步都能執行有限次數完成 正確性 沒有語法錯誤 ...
演算法和資料結構(二) 演算法
接著上篇部落格,這篇部落格我們一起看看傳說中的演算法 早知道這麼簡單,早點看看的話,阿里也就去了,淚奔.面試常見的演算法分為兩種 排序演算法和查詢演算法。1 逐個比較相鄰的兩個元素,將較大的值往後放 2 第一輪比較完最大的元素放陣列最後,第二輪剩下的元素裡最大的元素放陣列倒數第二位.public c...
資料結構 二 演算法緒論
一,演算法定義 算是是對於特定問題的求解步驟的描述,在計算機中表現為有限的指令序列.每條指令序列包含乙個或者多個操作 二,演算法的特徵 1,輸入.演算法有零個或者多個輸入 2,輸出.演算法至少要有乙個輸出 3,確定性.演算法的每乙個步驟都有確定的含義,不會出現二義性 4,可行性.每一步執行有限次數完...