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