題意:有兩種操作:[1, x]表示將x這個點標記,[2, x]表示查詢x後面第乙個未被標記的數。
思路:q的值比較小,所以解題應該從q入手,用並查集模擬實現乙個鍊錶,用map模擬並查集。當標記乙個點x時,令x的父親等於x+1的父親,查詢時直接輸出x的父親即可。
accepted code:
/*
* @author: lzyws739307453
* @language: c++
*/#include
using
namespace std;
unordered_map <
int,
int> fa;
intgetf
(int v)
void
merge
(int u,
int v)
intmain()
return0;
}
題意:給定乙個整數w表示西瓜的重量,切成兩半之後每一部分都是2的倍數公斤(一直翻譯成1的兩倍)。如果 滿足要求輸出yes,否則輸出no。
思路:判斷w是否能被2整除,另外還需要考慮w的值不能為2(分成兩半之後各自為1,不是2的倍數)。
accepted code:
/*
* @author: lzyws739307453
* @language: c++
*/#include
using
namespace std;
intmain()
題意:判斷主串t和子串s的關係。
思路:由於q∗(
∣s∣+
∣t∣)
≤1e7
q ∗ (|s| + |t|) ≤ 1e7
q∗(∣s∣
+∣t∣
)≤1e
7, 對於每一次詢問,用kmp判斷即可。
accepted code:
/*
* @author: lzyws739307453
* @language: c++
*/#include
using
namespace std;
const
int maxn =
1e5+5;
int nex[maxn]
;char str[maxn]
, st[maxn]
;void
next
(char str,
int len)
}bool
kmp(
char sa,
int la,
char sb,
int lb)
return
false;}
intmain()
else
if(len > la)
else
}return0;
}
題意:給定乙個序列,從每乙個數後面比它大至少 m 的數中求出與它之間最大的距離,如果沒有則為−1。
思路:從後向前維護乙個遞增的佇列,從後往前遍歷,若當前的數大於隊尾就進隊,否則從該佇列中二分找最小的比自己大至少m的數,二者之間的距離即為答案。若當前數小於隊尾,那這個數一定沒有隊尾的數優,因為它既比隊尾的數靠前,又比它小。
accepted code:
/*
* @author: lzyws739307453
* @language: c++
*/#include
using
namespace std;
const
int maxn =
5e5+5;
int p[maxn]
, q[maxn]
, s[maxn]
, spt[maxn]
;int
main()
else
}for
(int i =
1; i <= n; i++
)printf
("%d%c"
, s[i]
,"\n "
[i != n]);
return0;
}
2019ICPC徐州網路賽
theme n個數編號為1 n,兩種操作 1 x 將編號為x的數置為不可得,2 x 詢問x位置及其後第乙個可得數的編號。1 n,x 1e9,1 q 1e6 solution 首先想到用線段樹維護。初始時線段樹每個l r位置的值為l,1 x操作對應將x位置值置為inf,2 x 操作相當於查詢區間 x,...
ICPC練習 2021ICPC亞洲區域賽南京
感覺刷cf遇到了一點瓶頸,開啟真題練習計畫。比賽鏈結 a比較簡單的構造,上下和左右分開,乙個方向先用n 1次移動到距離目標更近的一段端點再同步移動。保證小於3 n 1 次 c考慮到答案是乙個數 乙個數 k 那麼我們掃過去的時候記錄一下哪個時候這兩個數的差分最大,通過這個差分調大某乙個數的個數 差分是...
2019 icpc 上海區域賽
第二次參加,很慘,2道題打鐵,罰時太多了,先寫的 k 題,不過沒寫對,然後以最快的速度完成了 b 題,不夠已經過去了一段時間了 k 題很快從基環發現是二分樹,但是錯了後才發現,如果完全圖過不了,我應該早點測那個樣例,長了教訓,最後暴力過了,雖然看到資料就知道是可以暴力過,但隊友沒那麼寫,還是最後發現...