原创 洛谷 [P1020] 導彈攔截 (N*logN)

首先此一眼就能看出來是一個非常基礎的最長不下降子序列(LIS),其樸素的 N^2做法很簡單,但如何將其優化成爲N*logN? 我們不妨換一個思路,維護一個f數組,f[x]表示長度爲x的LIS的最大的最後一個數字是f[x]。(爲什

原创 洛谷 [P1024]一元三次方程求解

一道水題然而坑點很多。 #include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> using namespace std; int

原创 搜索有關的好題和思路

枚舉 等差數列(ZJOI2004) 給定 n(1<=n<=100)個數,從中找出儘可能多的數使得他們能夠組成一個等差 數列.求最長的等差數列的長度. 我們首先必須對這個數列進行排序,排序我們採用 QuickSort。然後我們

原创 洛谷 [p1196] 銀河英雄傳說

所謂帶權並查集 本題所求的不止是兩個編號之間是否有關係,還要求兩個編號之間有什麼關係,這就要求我們維護多個數組,fa[]數組維護兩個編號之間的連通性,dis[]維護編號爲i的戰艦到fa[i]之間的距離,num[]維護編號爲i的戰艦所在的那

原创 洛谷 [P2296] 尋找道路

反向BFS預處理,求出所有符合題意的點,再正向BFS,(注意對於邊權恆爲一的點,BFS,比SPFA高效) 輸入時n與m分清 #include <iostream> #include <cstdio> #include <algor

原创 洛谷 [P2024] 食物鏈

並查集 這是一道比較特殊的並查集,開一個三倍的數組, 1~n保存同類,n~n×2保存獵物,n*2~n*3保存天敵; #include <iostream> #include <cstdio> #include <cstring> #inc

原创 一些比較實用的網站

題解:shawnZhou 講算法的BYVoid 題解 點贊 收藏 分享 文章舉報 Mr_Wolfram 發佈了43 篇原創文章 · 獲贊 2 · 訪問量 8428

原创 洛谷 [P1198] 最大數

首先這是一道線段樹裸題,但是線段樹長度不確定,那麼我們可以在建樹的時候,將每一個節點初始化爲-INF,每次往隊尾加一個元素即一次單節點更新,注意本題的數據範圍,其實並不用開 long long,具體請看註釋。 #include <iost

原创 洛谷 [P1801] 黑匣子

這道題是一道splay裸題,然而身爲蒟蒻的我並不會,所以這道題我維護的是一個大根堆與一個小根堆結合起來的類似沙漏的結構。 本題難點在於詢問的不是最大最小值,而是第K小值,所以我們想到了維護這樣兩個堆,上面是一個大小限定爲K-1的

原创 洛谷 [P1182] 數列分段

這是一道典型的二分答案問題(最大值最小,最小值最大)關鍵是對於細節的處理。 二分的框架: //l=max{num[i]},r=sum{num[i]} while(l<=r){ int m=(l+r)>>1;

原创 洛谷 [P1280] 尼克的任務

DP 題目問的是最大空暇時間,那麼就定義dp[i]爲第i分鐘的最大空暇時間,顯然滿足最優子結構,我們發現dp[i]僅與其後的值有關,那麼從後往前推,如果第i分鐘沒有任務,dp[i]=dp[i+1],如果有任務,就遍歷所有任務 dp

原创 洛谷 [P1426] 通往奧格瑞瑪的道路

題目中的表述很明顯是一道二分答案+最短路的題目,二分收取的費用x判斷能否到達奧格瑞瑪。檢驗函數用SPFA跑最短路,注意,費用高於x的點不能使用。 #include <iostream> #include <cstdio> #inc

原创 洛谷 [P2420] 讓我們異或吧

某兩點之間的路徑上所有邊權的異或值即dis1^dis2……^disn. 由於x^y^y=x,所以dfs預處理出每一點到根節點的異或值,對於每次詢問,直接輸出 disu^disv. #include <iostream> #inc

原创 洛谷 [p1439] 最長公共子序列 (NlogN)

可以發現只有當兩個序列中都沒有重複元素時(1~n的排列)此種優化纔是高效的,不然可能很不穩定。 求a[] 與b[]中的LCS 通過記錄lis[i]表示a[i]在b[]中的位置,將LCS問題轉化爲最長上升子序列問題,轉化方法如下

原创 Mr_Wolfram還要做什麼

二分 借教室 營救 點贊 收藏 分享 文章舉報 Mr_Wolfram 發佈了43 篇原創文章 · 獲贊 2 · 訪問量 8426 私信