週六晚上打比賽
然後手速(其實是腦速)賊慢的切了c/d
然後e寫了乙個n2
log n
2log
,線段樹老是wa也是夠了
然後f就gg了,不過這題確實很巧me估計me想出來考試早結束了
傳送門乙個zz題
列舉那個位置作為中間點,左邊朝左的需要轉向,右邊朝右的需要轉向
搞個字首和 / 字尾和,然後掃一遍
#include
#include
#include
using
namespace
std ;
int pre[300005] , suf[300005] , len ;
char a[300005] ;
template
< typename t >
void smin( t &x , t y )
int main()
傳送門
對於每個數字,都只有至多乙個數字擁有,才能統計入答案
顯然是有單調性的乙個玩意,所以two pointer掃一掃就好了
#include
#include
#include
using
namespace
std ;
int n , a[200005] ;
void solve() printf( "%lld" , ans ) ;
}int main()
傳送門
這個資料範圍很小,然而並沒有什麼好的dp做法,於是考慮從答案入手
當我們固定了小端的數字時,顯然希望最大的被刪掉的數字盡量小
因為這個東西不容易二分,所以直接列舉刪除最小的是哪乙個,然後check
假設最小能被刪掉的是
u u
,那麼把小於
u' role="presentation" style="position: relative;">u
u的數字都看成斷點,然後從小到大列舉數字看可不可以刪除,只要存在乙個區間包含當前數字且不經過斷點就好了。然後me就直接上了線段樹…(記錄一下每個斷點,查詢當前數字所在區間數字總個數是否夠
k k
個)當然也可以直接把所有區間取出來,然後把可以刪掉的數字拿出來排個序得到答案。
出題人說這題資料範圍可以出到 105
' role="presentation" style="position: relative;">10510
5,並且說:this part is left as an exercise for readers
然而me還沒有去想
#include
#include
#include
using
namespace
std ;
bool ban[2005] ;
int n , k , q , a[2005] , rk[2005] , sa[2005] ;
int pre[2005] , nxt[2005] ;
struct node *root , w[4005] , *tw = w ;
template
< typename t > void smin( t &x , t y )
bool cmp( const
int &a , const
int &b )
node *build( short lf , short rg ) return nd ;
}void reset( node *nd , short lf , short rg ) else nd->sum = !ban[lf] ;
}short query( node *nd , short lf , short rg , short l , short r )
void set_zero( node *nd , short lf , short rg , short pos )
void prework()
void solve()
} if( cnt != q ) break ;
smin( ans , a[ sa[ed] ] - a[ sa[st] ] ) ;
for( int j = 1 ; j <= i ; j ++ ) ban[ sa[j] ] = false ;
} printf( "%d" , ans ) ;
}int main()
傳送門
這個題,有一種很熟悉的感覺
就是類似這種題:去打怪,打死第
i i
只怪 先消耗 ai
' role="presentation" style="position: relative;">aia
i點生命值,然後再補回 bi
b
i點生命值,問最少需要多少血
上面那道題,顯然是先打回血的怪,再打掉消耗大的怪
先打一次性消耗大的怪(不計回血)的原因是,如果先打那種回血較多的怪,血量就會被慢慢消耗以至於無法打死大怪
然後看這道題,是類似的。顯然小於b的a是無用的,所以先把所有小於b的a全部換成b
然後,答案至少得是 ∑i
bi∑ ib
i,要在這個基礎上增加來滿足
a a
的限制
然後根據上一題得到的經驗,我們想優先選擇 a−
b' role="presentation" style="position: relative;">a−b
a−b大的,因為如果選了太多 a−
b a−b
小的點之後,可能就無法滿足某些點的
a a
的限制了(這種情況會發生在那些
a' role="presentation" style="position: relative;">a
a很大,而且 a−
b a−b
也很大的點上)
但是這種策略還存在乙個問題,就是萬一我選了這個點,然後把圖分成了幾塊,這樣就導致如果我先選這個點,以後還得經過這個點且需要滿足
a a
的限制,這顯然是不優秀的。那麼對於這種點,我們肯定是先把所有其它連通塊填完了,只剩下最後某乙個連通塊,把這個割點搞了之後,就進入最後的那個連通塊,把它填了,顯然這樣是不劣的
所以我們現在有了乙個策略:對於不是割點的點,按照 a−
b' role="presentation" style="position: relative;">a−b
a−b從小到大挨個挨個填,對於割點特殊考慮(列舉填到最後剩下的乙個,選最優策略)
然後這個步驟,實際上就是按照 a−
b a−b
從小到大排序建樹的過程,葉子結點的值最小,根權值最大,然後直接在樹上dp就可以了
**me還沒有寫,不過可以參考這個:傳送門,感覺邏輯比較清晰
ARC 學習筆記(一)
arc,顧名思義,automatic reference count,也就是自動引用計數。它是相對mrc 手動引用計數 而言的。當時不管是arc還是mrc,都應該嚴格遵守objective c記憶體管理的基本原則 strong修飾符 strong修飾符是預設的修飾符。這樣不管是alloc new c...
補一下部落格
其實這是前幾天的工作了,一直沒有寫部落格,現在來補一下。上一次是把數獨的檢查工作做了,但是數獨生成方法一直沒有好的想法,也看了幾篇部落格,但是都不大好,有點的是不好解決重複的問題,有的是不好生成百萬數量規模的生成方法。但是前幾天再看時,第一篇搜到的部落格就是針對百萬資料規模的數獨生成方法,貌似與我們...
Hibernate一級快取(補)
siwuxie095 什麼是快取 快取是介於 應用程式和永久性資料儲存源 如 硬碟上的檔案 或資料庫 之間,其作用是降低應用程式直接讀寫永久性資料儲存源的頻率,從而提 高應用的執行效能 針對資料庫,則 資料是存到資料庫中的,而資料庫本身也是檔案系統,使用流方式操作文 件的效率並不是很高 如果把資料存...