noip2017提高組 day2 t3
sylvia 是乙個熱愛學習的女孩子。
前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n×m 名學生,方陣的行數為 n,列數為 m 。
為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中的學生從 1 到 n×m 編上了號碼(參見後面的樣例)。即:初始時,第 i 行第 j 列的學生的編號是 (i-1)×m+j。
然而在練習方陣的時候,經常會有學生因為各種各樣的事情需要離隊。在一天中,一共發生了 q 件這樣的離隊事件。每一次離隊事件可以用數對 (x,y) (1≤x≤n,1≤y≤m)描述,表示第 x 行第 y 列的學生離隊。
在有學生離隊後,隊伍中出現了乙個空位。為了隊伍的整齊,教官會依次下達這樣的兩條指令:
1. 向左看齊。這時第一列保持不動,所有學生向左填補空缺。不難發現在這條指令之後,空位在第 x 行第 m 列。
2. 向前看齊。這時第一行保持不動,所有學生向前填補空缺。不難發現在這條指令之後,空位在第 n 行第 m 列。
教官規定不能有兩個或更多學生同時離隊。即在前乙個離隊的學生歸隊之後,下乙個學生才能離隊。因此在每乙個離隊的學生要歸隊時,隊伍中有且僅有第 n 行第 m 列乙個空位,這時這個學生會自然地填補到這個位置。
因為站方陣真的很無聊,所以 sylvia 想要計算每一次離隊事件中,離隊的同學的編號是多少。
注意:每乙個同學的編號不會隨著離隊事件的發生而改變,在發生離隊事件後方陣中同學的編號可能是亂序的。
輸入共 q+1 行。
第 1 行包含 3 個用空格分隔的正整數 n,m,q,表示方陣大小是 n 行 m 列,一共發生了 q 次事件。
接下來 q 行按照事件發生順序描述了 q 件事件。每一行是兩個整數 x,y,用乙個空格分隔,表示這個離隊事件中離隊的學生當時排在第 x 行第 y 列。
按照事件輸入的順序,每乙個事件輸出一行乙個整數,表示這個離隊事件中離隊學生的編號。
輸入
2 2 3輸出1 12 2
1 2
1 1【輸入輸出樣例1說明】4
列隊的過程如上圖所示,每一行描述了乙個事件。
在第乙個事件中,編號為1的同學離隊,這時空位在第一行第一列。接著所有同學向左標齊,這時編號為 2 的同學向左移動一步,空位移動到第一行第二列。然後所有同學向上標齊,這時編號為 4 的同學向上一步,這時空位移動到第二行第二列。最後編號為 1 的同學返回填補到空位中。
【資料規模與約定】
資料保證每乙個事件滿足 1≤x≤n;1≤y≤m。
解析:線段樹。
實現前30分直接模擬。
然後我們來看n=1的情況,只需要找出第k個數,將它移到隊尾即可,於是就可以愉快地 treap/splay 啦。
因為m不大,於是考慮用權值線段樹,每次找出第k個沒有使用的位置。
1.如果找到的數小等於m,將它標記為使用,加進 vector 中。
2.如果找道的數大於m,則實際值即為 vector 裡的第 num-m 個數。
對於100%的資料,我們仍可以使用以上做法,對每一行都建一顆權值線段樹。特別的,我們還要對最後一列建一顆權值線段樹。對於每個操作,分兩種情況:
1.該位置 (x,y) 中若 y2.該位置 (x,y) 中若 y<=m,則直接在最後一列線段樹上查詢和修改。
線段樹要動態開點,注意開。
分析一下時間與空間複雜度:
首先時間複雜度容易知道是:
其次空間複雜度,由於是動態開點,所以每次查詢q次,每次更新 logn 個節點,所以大致還是
**:
#pragma gcc optimize(3)
#include #define ll long long
using namespace std;
const int max=300005;
int n,m,q,sum,tot;
int tree[max*20],lc[max*20],rc[max*20],rt[max];
vectornum[max];
inline int get_int()
inline void print(ll x)
inline void add(int &now,int l,int r,int pos)
inline int q(int root,int l,int r,int k)
inline ll qr(int x,ll v)
inline ll ql(int x,int y)
int main()
return 0;
}
NOIp2017提高組 列隊
乙個 n times m n,m le3 times10 5 的方陣,每個格仔裡的人都有乙個編號。初始時第 i 行第 j 列的編號為 i 1 m j q q le3 times10 5 次事件,每次在 x,y 位置上的人離隊。剩下的人向左 向前填補空位,然後離隊的人在 n,m 處歸隊。求每次離隊事件...
Noip2017提高組 乳酪
noip 2017 提高組 不怎麼難啦 思路如下 首先先寫乙個函式判斷兩個洞是否相連,即兩洞之間距離是否小於等於球直徑 注意是直徑 struct dong dong p 1001 bool pd dong a,dong b 第二個難點在於如何判斷是否可以穿過乳酪,對此我們可以模擬老鼠鑽洞 run函式...
NOIP 2017 提高組 寶藏
傳送門 參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n nn 個深埋在地下的寶藏屋,也給出了這 n nn 個寶藏屋之間可供開發的 m mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...