資訊讀書會[1]

STL・Greedy・二分搜

by FHVirus

似乎校培都講過了qwq

反正我再講一次給沒聽過的嘛

很電的學弟就去刷題吧

STL 之一

Stack・Queue・Deque

FiLO

FiFO
DoublEnd

沒有 Lo-fi

#include<stack>
#include<queue>
#include<deque>

std::stack<int> stk;
std::queue<int> Q;
std::deque<int> dq;

stk.push(80000000);
int a = stk.top();
bool b = stk.empty();
stk.pop();

Q.push(7122);
int c = Q.front();
Q.pop();

dq.push_back(a);
dq.push_front(c);
int e = dq.front();
int f = dq.back();
dq.pop_front();
dq.pop_back();

可以幹嘛?

UVa 514 Rails

ZJ c123

給定一排牛(不是一牛排)每頭牛的高度,

牠們只能往右平視或俯視,

請問牠們分別能夠看到幾頭牛?

Queue 沒有裸題qwq

據說是 Deque 題,講師還沒寫過,

因為學長有放所以我也放 OW0)_b

單調隊列・單調棧?

給定一個長度為 \(n\) 的序列 \(a\),求:

  1. 給定一個正整數 \(k\),所有「連續 \(k\) 個數最大值」的最小值為何?
  2. 對每個數字 \(a_i\),符合 \(i < j, a_i < a_j\) 的最小 \(j\) 是多少?

STL 之二

Priority Queue・Set・Map

Priority Queue?

把最 () 的彈出來!

Set ?

就是集合而已

Map ?

一對一映射

學號 → 名字

Handle → Rating

講師 → 髮色

不支援倒著查喔!

注意!

有時不一定需要 Set 跟 Map !

可以用陣列就用陣列!

#include<queue>
std::priority_queue<int> pq;

pq.push(80000000);
pq.push(131);
pq.push(7122);

int a = pq.top(); // 80000000
pq.pop();


struct cmp{
	bool operator()(int a, int b){
    	return a > b;
    }
};
std::priority_queue<int, vector<int>, cmp> minpq;
minpq.push(80000000);
minpq.push(131);
minpq.push(7122);

int a = minpq.top(); // 131
minpq.pop();

Set・Map 自己查

複雜度?

Greedy!

「不拿白不拿」——某講師口癖

不切白不切

現在有 \(n\) 隻小蘿莉,

每隻蘿莉想要 \(a_i\) 份,
如果你將你一塊 \(x\) 單位的身體切成兩塊,

你會恰好感到 \(x\) 單位的痛苦度,

請問你至少會感到多少痛苦度呢?

$$n \leq 10^5, a_i \leq 10^4$$

每次取最小!

不取白不取!

怎麼取?

Priority Queue!

注意!

要先確定可不可以 Greedy!

二分搜

電神學弟上來講

剛好練一下 Interactive

作為一個建中生應該要會這題的最佳解吧OW0;)A

二分搜就是這麼簡單!

但是要好好處理開開閉閉!

把東西䖃再一起吧!

不䖃白不䖃

給定 \(N\) 會做嗎?

CF 最近爛爛的 qwq

要怎麼搜?二分好像不夠?

要怎麼搜?一定要搜嗎?

看到這裡代表

講師備課又備太少了

就去實作吧

Made with Slides.com