未解決的題
並查集+
樹狀陣列。
如果不考慮抽出書本的操作,這是一道相對簡單的並查集題目,只需給每本書再開乙個域,記錄其上有多少本書即可。我們發現,當書堆起來的時候,可以按照從上到下的順序給每本書重新編號,
如果抽出一本書,則可以在這本書的新編號上標記
-1,表示刪除。如果要統計書本
i(設書本
i的新編號為
y)上有多少本書,則可以把它最上面的那本書的新編號
x找出來,數x到
y之間有多少本書被刪掉,然後就能得解。從這時候想到了什麼?
樹狀陣列!所以,我們先把所有操作存起來,然後進行一次堆書的操作,這時候不考慮抽出書,根據最後的書在各自書堆的順序,給乙個新編號。最後,重新進行一次堆書操作,這時候就能利用新編號對書本進行刪除操作了,用樹狀陣列快速統計。
時間複雜度:
o(並查集
) + o(mlongn)
計算幾何(叉積的應用)
叉積:p(x1,y1),q(x2,y2) p*q=x1y2-x2y1若p
×q>0,則p
在q的順時針方向;若p
×q<0,則p
在q的逆時針方向;若p
×q=0,則p
和q共線,但可能同向也可能反向;
int cross(point p0,point p1,point p2)
本題的思路:
1.如果
p[i]
與p[i-1]
是乙個點,輸出
stand
2。如果
cross(p[i],p[i-1],p[i-2])>0,
則是right
3.如果
cross(p[i],p[i-1],p[i-2])<0,
則是left
4.如果
cross(p[i],p[i-1],p[i-2])==0
則共線,然後需要再判斷一下是向前還是向後。
對於按順序訪問的點
a->b->c,如果
b在ac之間,輸出
toward
如果是c在ab
之間或者a在
cb之間,則為
backward
。
19級暑假第一場訓練賽
題目出自 codeforces round 547 div.3 includeusing namespace std typedef long long ll ll n,m bool flag int cnt 資料不大,暴力深搜 void dfs int now,int step if now m ...
牛客寒假第一場訓練賽
比賽鏈結 題解b題 構造題先找構造括號效率比較高的方法 這種括號裡面套括號效率比較高而且合法 所以思路就是對所給整數開方,剩餘的零頭我們用列舉的方法。但是對於一些資料直接用開方得到的數x構造的話,會導致零頭太小,不好構造零頭 第一步構造的是乙個對稱的括號,有x個左括號,如果零頭小於x的話,就不好構造...
10 29訓練賽第一場B題
題目大意 有n個隊伍之間比賽,每兩個隊伍之間都有一場比賽,因此一共有n n 1 2場比賽,但是這裡丟失了一場比賽的記錄,現在讓你通過n n 1 2 1場仍然存在的比賽記錄來判斷丟失的那條比賽記錄 是什麼。解題報告 因為每兩個隊伍之間都有一場比賽,所以每個隊伍都應該有n 1次比賽,所以只要統計存在 的...