對於一個肯定的集合,只多是先減後增、單調增、>0部分的單調減node
減的最優出如今0,check下函數
沒有就直接二分值域,對於x,選出最大的m個函數值驗證。測試
nth_element能夠作到O(n)ui
式子能夠化成與自身和x1有關,分奇偶討論x1前的符號。spa
邊的貢獻在其子樹,BIT維護dfs序差分前綴和,區間修改,單點查詢(get祖先鏈上的信息)。code
鴿.blog
反悔貪心:element
a<b<c,在b賣a可能不最優,如這狀況。那麼咱們留給c一個反悔的機會。get
發現b-a+c-b=c-a,這就很好了。直接加兩個b,一個b用來抵消在b賣a轉而在取出位置賣a,一個用於單純賣b。hash
反悔貪心難在構造反悔操做,實際上是基於性質。
因此拿到題必定要推性質,不管是dp仍是貪心,都能對簡化問題有幫助。
考試的時候沒有打表,沒看出來規律。
發現$S_{n,m}$能夠由$S_{n-1,m},S_{n,m-1}$遞推,轉移O(1)。
而後把詢問轉換詢問[m,n],莫隊解決。
大模擬。
並查集維護連通關係,把矩形看做點,相鄰關係看做邊,發現點數-邊數(合併次數)=連通塊數,這個式子的前提是無環,並查集保證了這一點。
題解所說相鄰關係與K同階,不太會證,口胡一下就是
矩形有兩邊長爲1,稱爲短邊,反之長邊。全部矩形長邊上的相鄰關係之和不會超過K個,每一個矩形短邊上至多有兩個。然而對於很混亂的狀況,胡了胡了。
這樣的話就容許咱們枚舉相鄰關係,若是咱們能快速的找到相鄰關係,複雜度就有保障。
考場上打了$x_1==x_2$的部分分。不太會處理橫豎交錯的。
正解:用一堆vector維護一堆信息,分類不漏就行。
快速查找相鄰關係用lower_bound
Get到新姿式:假如我要在struct node{int l,r;}類型的vector中找到大於等於x的第一個下標
bool cmpr(const Node &a,int b){return a.r<b;} int p1=lower_bound(h[d-1].begin(),h[d-1].end(),L,cmpr)-h[d-1].begin();
注意cmpr的參數順序
指望得分:60+100+8
實際得分:60+60+10
考試的時候沒細看範圍
觀察到n很小,必定有陰謀
若是枚舉y,對於一個y可算出c在[1,q]內有多少正整數x,然而會重複。
用最小y去統計c就行了。
可知$y\in [0,min( \frac {n} {gcd(n,m)},\left \lfloor \frac{q}{m} \right \rfloor)]$
記得加上$x=0,y=i$除去$x=0,y=0$
這題考場上寫了個hash表dp,不是菊花圖很優秀
dp方法相似Park,因爲這題沒有up down之分,兒子只用dp一遍,然而考場上傻了,作了兩遍,常數爆炸。
正解:枚舉gcd,加入全部是gcd倍數的邊,求森林最長鏈。稍卡常。
最近的低錯在另個裏。