原创 Codeforces 689D Friends and Subsequences(RMQ+二分)

題意:大小爲n的序列a和b中,求(l,r)的個數,使得max(a[l..r]) = min(b[l...r])。 解析:在固定l後,隨着r的增加,max(a[l..r]) - min(b[l...r])是不減的。所以可以通過二分求得max

原创 Codeforces 637D Running with Obstacles (貪心)

解析:查看每對相鄰的障礙,如果距離大於s,那麼可以落地並在下一個障礙前起跳。對每次落地和起跳加以判斷即可。 [code]:#include<cstdio> #include<cstring> #include<algorithm> us

原创 Codeforces 659F Polycarp and Hay (排序+並查集)

解析:將所有的cell按高度從大到小排序,然後每次放入值相同的cell,用並查集維護集合和集合大小,並判斷是否滿足條件即可。找到後搜索標記所有的位置。 [code]: #include<cstdio> #include<cstring>

原创 HDU 5288 OO’s Sequence (數論)

題意:定義一個函數f(l,r) = i的個數使得在區間[l,r]中不存在a[i]%a[j]=0。∑i=1..n∑j=i..n  f(i,j) mod (10^9+7)。 解析:通過枚舉因子,從前到後再從後到前求出能包含i的區間的左右端點的

原创 Codeforces 645E Intellectual Inquiry (貪心+DP)

解析:假設當前已經放了i個字符,c[p]爲當前以p結尾的字符串的個數,sum = c[0] + .... c[25]。 在放入第i+1個字符後,應該使sum儘可能大。 假設放入的是字符t,那麼新的c[t]的值爲sum+1(所有串+自己),

原创 Codeforces 689E Mike and Geometry Problem(離散化+懶標記)

題意:給出n個線段[li,ri],求任意k個線段所共同覆蓋的點的總和。 解析: 對於每一條線段,區間[li,ri]加一,如果一個位置的值爲m,那麼最後的結果ans += C(m,k); 如果只是離散化端點的話,沒法求得中間部分被覆蓋的點,

原创 CodeForce 626E Simple Skewness (貪心+三分)

題目:給出n個數字,求出一個子集,使得其平均數與中位數的差值最大。 解析:首先將a[1...n]從大到小排序,在固定中位數的位置後,子集的構成必然是在中位數位置的兩側選取相同個,顯然,每側要儘量選取較大的值。 可以發現,選取的個數與平均數

原创 Hdu 5316 Magician (線段樹區間合併)

解析:關鍵是處理奇偶的問題。 正如官方題解所說,本題的子序列實際上可以根據起始數值下標的奇偶性分爲四類。 對於每一類,如果你熟悉線段樹,那麼可以看出這個問題是可以進行區間合併的。 即如果知道一個區間[L, R]兩個子區間 [L,mid],

原创 HDU 5301 Buildings (亂搞)

解析:首先使得矩陣的n<=m,然後將矩陣對稱處理,使得(x,y)的位置位於右下。這樣一來只需要判斷(x-1,y)的處理以及完後的對應方案即可。 [code]: include<cstdio> #include<cstring> #incl

原创 Codeforces 626F Group Projects (DP)

官方題解很詳細 This is a dynamic programming problem. Notice that the total imbalance of the groups only depends on which st

原创 HDU 5289 Assignment (尺取+Set)

題意:n個數字中取出連續的一組數字使得任意兩個差小於k,求方案數。 解析:two points,用multiset維護一下區間差值即可。 [code]: #include<cstdio> #include<cstring> #includ

原创 HDU 5296 Annoying problem (樹狀數組+dfs序+倍增)

題意:一顆n節點的帶權無向樹,一個初始爲空的集合S,有兩種操作:1 x 如果S中沒有x,加入x ;2 x 如果S中存在x,刪除x。每次操作完後求出使S集合連通的最小邊權和。 解析:設root爲S集合的LCA。點i的左右時間戳爲L[i],R

原创 Hdu 5317 RGCDQ (dp+預處理)

解析:F(x)的最大值是7,直接通過dp統計各個值的前綴和即可。 [code]: #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #inc

原创 HDU 5302 Connect the Graph (構造)

原題解鏈接:http://www.cnblogs.com/shjwudp/p/4719279.html [code]: #include<cstdio> #include<cstring> #include<algorithm> #inc

原创 HDU 5297 Y sequencew(容斥+收斂迭代)

題目:從1開始的無限長正整數序列(1,2,3,4,5,...),剖去所有可以寫成a^b的數(2<=b<=r),求第n個數是多少。 解析:首先對於每一個r處理出對應容斥的數字,用vector記錄下來以降低複雜度。 開始的時候同樣像的是二分,