乙個\(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 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...