NOIp2017提高組 列隊

2022-05-20 08:07:40 字數 1102 閱讀 9023

乙個\(n\times m(n,m\le3\times10^5)\)的方陣,每個格仔裡的人都有乙個編號。初始時第\(i\)行第\(j\)列的編號為\((i-1)*m+j\)。

\(q(q\le3\times10^5)\)次事件,每次在\((x,y)\)位置上的人離隊。剩下的人向左、向前填補空位,然後離隊的人在\((n,m)\)處歸隊。

求每次離隊事件中的人的編號。

對於每一行\(1\sim m-1\)列建一棵線段樹,對於最後一列也建一棵線段樹。開同樣數量的vector

\((x,y)\)離隊時,在第\(x\)棵線段樹上找到第\(y\)個未移動的值在vector中的位置,再從最後一列的線段樹中找到第\(x\)個未移動的值加入第\(x\)個vector末尾,最後將答案加入最後一列對應vector末尾即可。

時間複雜度\(\mathcal o(q\log n)\)。

#include#include#includeinline int getint() 

using int64=long long;

constexpr int n=3e5+2,size=1e7;

int n,m,q,lim;

std::vectorv[n];

class segmenttree ;

node node[size];

int sz,new_node()

public:

int root[n];

void modify(int &p,const int &b,const int &e,const int &x)

int query(const int &p,const int &b,const int &e,const int &k)

#undef mid

};segmenttree t;

int64 del2(const int &x,const int64 &y)

int64 del1(const int &x,const int &y)

int main()

return 0;

}

NOIP2017提高組 列隊

noip2017提高組 day2 t3 sylvia 是乙個熱愛學習的女孩子。前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n m 名學生,方陣的行數為 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 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...