傳送門
很有意思的一道題
因此,問題就可以歸結到如何構造上了
那麼該如何構造呢?
由於資料很大,結合經驗基本可以確定是o(n)的時間複雜度,因此就要思考如何處理才能使得操作具有o(n)的時間複雜度
先用乙個優先佇列(小根堆)存入每個值為1的點,這樣所有為1的點就按照順序排列了,還有一點非常重要的是:
如果不符合就跳到下乙個符合條件的地方
#include #include #include #include using namespace std;
const int n = 2e5 + 10;
int a[n];
void solve()
return;
} pq.push(n + 3e5);
int temp = 0;
while(pq.size() && temp < n)
temp ++;
} int ans = 0;
for(int i = 0; i < n; i ++)
} }cout << ans << endl;
}int main()
return 0;
}
偶爾貪一下。
個人認為貪心是最容易實現的 了,雖然他沒什麼套路可言,但卻是只要有了思路,實現起來還是很輕鬆的。演算法分析 舉個栗子 某個國家,決策都是由投票決定。為了提高效率,他們先將所有人分組,首先進行組內決策,然後再進行組與組之間的決策。如果贊同得票數多於 不是 組內一半即小組內贊成。如果有超過 不是 一般的...
演算法 對貪 演算法對研究
貪 演算法是 種求近似解的思想。當能滿 部分最優解時就認為符合邏輯要求。還 找零 這個案例為例,考慮使 貪 演算法解題 如當找零數為 36 時,從硬幣數的最 值 20 開始填充,填充不下後再 10 來填充,以此類推,找到最優解。場景 假如有 1,5,10,20,50,100 的 幣 36 找零數 2...
POJ1201 Intervals 線段樹 貪心
原題鏈結 題意 給定一些區間,每個區間裡必須取ci個數,這些數組成乙個集合z,求z的最少的元素數 思路 由於如果兩個區間如果有重複取的元素,那麼這個元素一定是在左邊的這個區間的最右邊的那些元素。所以我們按照區間的右邊界排序後,總是如果當前區間還需要取數,那麼就從右往左取還沒有被取的數即可。然後就可以...