原创 E. Zbazi in Zeydabad

樹狀數組的運用->好題 首先我們能想到n^3的做法,但是會超時,所以就需要優化。 我們用樹狀數組維護的是從這個點開始向後滿足條件的情況 樹狀數組是維護的斜率,需要開n+m個樹狀數組; 用一個vector<> 去維護長度v[i

原创 E - Lomsat gelral

思路參考網上的 不用啓發式合併的話,會爆內存 Memory limit exceeded on test 26 小的去合併大的。。。 其實主要就是代碼中標記的那段 #include <algorithm> #include <

原创 連接小島

51NOD 1460 中文題意我就不描述了。。。 被這題坑了好久 一開始還以爲是圖論題目,最後想到了是貪心題目 然後嘗試了很多方法 最後我用的是將每一段的約束條件先處理出來,然後按照左邊大到小排序,然後每次找右邊滿足條件的,進

原创 HDU 5875 Function

主要是線段樹上的二分,線段樹存區間最小值 每次找小於等於p的值,先在左邊找,然後在右找,l,r爲要找的區間 找到之後,該值的位置設爲pos,P模上這個值,然後再找pos+1,r,直到找不到就輸出就完了 #include <al

原创 F. Card Game

主要是參考別人的代碼和想法做的 這題是網絡流建模的題 奇偶性建模,主要是用二分圖的形式,奇數二分圖爲一邊,偶數爲另外一邊,主要是要注意1。 我將我的dinic模板抽象爲下面這樣,僅供參考。 主要是用前向星的方式存邊 struct

原创 E. Beautiful Subarrays

trie樹 利用前綴和,然後注意要先插入0; 可以比較一下我的另外一篇,有一處不太一樣,其他的大致相同 #include <algorithm> #include <iostream> #include <cstring> #

原创 XOR key

51nod 1295 可持久化trie,其實和可持久化線段樹差不多 之前寫過一次,現在加深了一點點對於可持久化的理解 #include <cstdio> #include <cstring> #include <iostre

原创 D - Longest Subsequence

思維題 首先大於m的都去掉 然後再在小於m的數中,先找最大公倍數,枚舉每一個數對於小於m的數的貢獻,像篩法那樣,例如如何找i對於小於m的所有公倍數的貢獻,只需要在i的一倍,兩倍。。。。上分別加上i的貢獻就行,具體實現看代碼 #i

原创 Iterated Linear Function

有很多種構造方法 我的構造方法是 A 1 0 1 #include <bits/stdc++.h> #define ll long long #define FOR(i,a,b) for(int i=a;i<=b;i++)

原创 昊昊愛運動 II

昊昊喜歡運動 他N天內會參加M種運動(每種運動用一個[1,m]的整數表示) 現在有Q個操作,操作描述如下 昊昊把第l天到第r天的運動全部換成了x(x∈[1,m]) 問昊昊第l天到第r天參加了多少種不同的運動 對於所有的Q操作

原创 D. Nested Segments

線段樹或者樹狀數組的裸題 按一個端點排序之後,離散化一下,沒什麼坑 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #i

原创 A. Office Keys

dp[i][j] 第一維表示people,第二維表示key 當i==j的時候,剛好每個人對應一把鑰匙 當i!=j的時候,分兩種情況,i去拿j,和i不用拿j 所以代碼如下 #include <algorithm> #include

原创 流水線調度

51nod 1205 流水線調度 這個問題已經被證明在N>=3的時候是個NP-hard 算法。 但是呢在n=2的時候是有多項式的解的。 先記個結論。。。還沒完全搞懂爲啥 就是如下的Johnson算法: ①:將任務分爲兩類,A類

原创 E - Thief in a Shop

題目大意是: n個物品,選k個,能組成的價值有哪些 我們最開始的想法就是枚舉每個物品多少個,然後就會發現是四維的。我們就要進行優化。 首先我們對n個物品進行排序,然後每一個物品減去第一個物品的價值。 dp[i]表示的是減去

原创 E - Minimum spanning tree for each edge

這個題目參考網上的思路。 首先求個最小生成樹,然後每加一條邊,就把成環的裏面除加入的這條邊的最大的刪除,就是答案。 最小生成樹用 克魯斯卡爾 弄一弄,邊弄最小生成樹的時候邊建樹。 然後用lca搞一搞就行了。 部分代碼如下 vo