傳送門:
1019:直線染色,離散化后直接做
1028:經(jīng)典問題,先按x坐標(biāo)第一關(guān)鍵字,y坐標(biāo)第二關(guān)鍵字排序,然后線段樹/樹狀數(shù)組/平衡樹都行
1037:優(yōu)先隊列維護靠前的空間,單調(diào)隊列維護刪除
1067:改造版Trie+DFS
1090:經(jīng)典逆序?qū)栴},樹狀數(shù)組/線段樹/歸并排序
1097:離散化后暴力
1100:惟一的玄機就是stable_sort
1126:固定的一個序列里面RMQ,S-T/優(yōu)先隊列/線段樹……
1147:開1000個線段樹硬搞,n^2logn,空間卡的很緊
1220:貌似簡單的問題,1000個棧,操作100000次就是push和pop,
很容易想到的裸做法是:int data[100000] 表示每個數(shù)據(jù),int fa[100000]表示每點在棧里的父親,int top[1000]表示1000個棧頂坐標(biāo)
但是內(nèi)存卡的很死很死,開200000個int是超的……
鑒于fa里的數(shù)據(jù)大小<=100000<17Bit,int的前15個Bit實際上浪費了,壓縮一下,將100000個int壓成了100000*17/32=52000個大概,過了
1306:求序列中位數(shù),但是不給你存下所有數(shù)的空間,用一個大小為N/2+1的堆搞定……
1316:BST里插入刪除Rank
1350:純水
1414:用set和lower_bound水……
1439:初始一個集合1000000000個數(shù),10000個操作:刪除和查詢第k大,由于操作不多,反其道而行之,用BST存儲刪除的值,查詢第k大時應(yīng)用二分+BST的rank
1470:三維樹狀數(shù)組
1471:樹上兩點間距離,DFS+LCA
1494:沒讀懂,上網(wǎng)查的,原來是判斷一個序列能否由一個棧以及12345.....n的序列生成……直接搞
1521:Joesph問題,可線段樹解決(忘了數(shù)學(xué)方法了)
1523:K-逆序?qū)栴},按照他的定義,重復(fù)使用經(jīng)典逆序?qū)λ惴ň托?br /> 1542:先把字符串排序,然后對一個前綴,用二分定區(qū)間,然后在區(qū)間里面線段樹,線段樹里存10個最大頻率,我優(yōu)化到了0.3S左右……求更快
1613:給你一個序列以及若干查詢,問某數(shù)是否在區(qū)間【L,R】間出現(xiàn)過
STL的應(yīng)用:map<int,set<int> >,對每個數(shù)維護一個出現(xiàn)集合,然后對每個查找,如果該數(shù)不在Map里,肯定沒有,如果在的話,在set里進行l(wèi)ower_bound,查找出現(xiàn)集合和區(qū)間【L,R】有沒有交
想法其實沒錯,但是TLE了,后觀察到這東西本來插入時是1~N走的,本來就有單調(diào)性,不用Set,用vector就行,改后AC
1628:30000*30000的地圖里,分布著60000個黑點,求空白線段數(shù)量,vector+二分,注意題意:答案為1*L和L*1(L>=2)的塊數(shù)+1*1的塊數(shù)
1650:按照題意用set、map之類的模擬水過
1654:給一個字符串,每次都消掉兩個相鄰且相同的字母,求最后得到的串,其實就是括號匹配,一個棧搞定
1671:給出一個圖,給出一系列邊,按順序拆掉,問每拆掉一個邊后圖里有幾個聯(lián)通塊
逆向思考,用并查集維護,把沒拆的邊先加入圖里,然后倒著來,一一加上邊,維護聯(lián)通塊個數(shù)
1019:直線染色,離散化后直接做
1028:經(jīng)典問題,先按x坐標(biāo)第一關(guān)鍵字,y坐標(biāo)第二關(guān)鍵字排序,然后線段樹/樹狀數(shù)組/平衡樹都行
1037:優(yōu)先隊列維護靠前的空間,單調(diào)隊列維護刪除
1067:改造版Trie+DFS
1090:經(jīng)典逆序?qū)栴},樹狀數(shù)組/線段樹/歸并排序
1097:離散化后暴力
1100:惟一的玄機就是stable_sort
1126:固定的一個序列里面RMQ,S-T/優(yōu)先隊列/線段樹……
1147:開1000個線段樹硬搞,n^2logn,空間卡的很緊
1220:貌似簡單的問題,1000個棧,操作100000次就是push和pop,
很容易想到的裸做法是:int data[100000] 表示每個數(shù)據(jù),int fa[100000]表示每點在棧里的父親,int top[1000]表示1000個棧頂坐標(biāo)
但是內(nèi)存卡的很死很死,開200000個int是超的……
鑒于fa里的數(shù)據(jù)大小<=100000<17Bit,int的前15個Bit實際上浪費了,壓縮一下,將100000個int壓成了100000*17/32=52000個大概,過了
1306:求序列中位數(shù),但是不給你存下所有數(shù)的空間,用一個大小為N/2+1的堆搞定……
1316:BST里插入刪除Rank
1350:純水
1414:用set和lower_bound水……
1439:初始一個集合1000000000個數(shù),10000個操作:刪除和查詢第k大,由于操作不多,反其道而行之,用BST存儲刪除的值,查詢第k大時應(yīng)用二分+BST的rank
1470:三維樹狀數(shù)組
1471:樹上兩點間距離,DFS+LCA
1494:沒讀懂,上網(wǎng)查的,原來是判斷一個序列能否由一個棧以及12345.....n的序列生成……直接搞
1521:Joesph問題,可線段樹解決(忘了數(shù)學(xué)方法了)
1523:K-逆序?qū)栴},按照他的定義,重復(fù)使用經(jīng)典逆序?qū)λ惴ň托?br /> 1542:先把字符串排序,然后對一個前綴,用二分定區(qū)間,然后在區(qū)間里面線段樹,線段樹里存10個最大頻率,我優(yōu)化到了0.3S左右……求更快
1613:給你一個序列以及若干查詢,問某數(shù)是否在區(qū)間【L,R】間出現(xiàn)過
STL的應(yīng)用:map<int,set<int> >,對每個數(shù)維護一個出現(xiàn)集合,然后對每個查找,如果該數(shù)不在Map里,肯定沒有,如果在的話,在set里進行l(wèi)ower_bound,查找出現(xiàn)集合和區(qū)間【L,R】有沒有交
想法其實沒錯,但是TLE了,后觀察到這東西本來插入時是1~N走的,本來就有單調(diào)性,不用Set,用vector就行,改后AC
1628:30000*30000的地圖里,分布著60000個黑點,求空白線段數(shù)量,vector+二分,注意題意:答案為1*L和L*1(L>=2)的塊數(shù)+1*1的塊數(shù)
1650:按照題意用set、map之類的模擬水過
1654:給一個字符串,每次都消掉兩個相鄰且相同的字母,求最后得到的串,其實就是括號匹配,一個棧搞定
1671:給出一個圖,給出一系列邊,按順序拆掉,問每拆掉一個邊后圖里有幾個聯(lián)通塊
逆向思考,用并查集維護,把沒拆的邊先加入圖里,然后倒著來,一一加上邊,維護聯(lián)通塊個數(shù)