費了好大勁寫完的 用線段樹維護的 nlogn的做法
再看了一下 大神們寫的 nlogn 額差的好遠
我寫的又多又慢 大神們寫的又少又快
時間 空間 **量 哪個都趕不上大佬們的**
//這是我寫的
#include#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 50010
;int
a[maxn];
int val[maxn<<2
];vector
v;int getid(int
x)int query(int l,int r,int l,int r,int
rt)void update(int x,int l,int r,int rt,int
vv)else
}int
main()
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
for(int i=1;i<=n;i++)
printf(
"%d\n
",ans);
return0;
}
//view code這是大神們的
#include#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef __int64 ll;
#define maxn 50050ll a[maxn],dp[maxn];
intmain()
else
else}}
printf(
"%d\n
",len);
}
最長遞增子串行 nlogn
include using namespace std 2 1 5 3 6 4 8 9 7 上課講了這個,回去之後就用 實現以下 這個演算法的目標是 找到乙個最長的遞增子串行 o nlogn 的複雜度 思路是遇到小的就留下,更新的路程中 插入到這個序列當中 一開始看那個麻瓜 blog 理解錯了 然後...
dp最長遞增子串行的nlogn演算法實現
n2的演算法很簡單,這裡是利用另外乙個陣列d,d i 存的是長度為i的最末尾元素。因為d i 是有序的,可以用二分查詢優化,複雜度降低為nlogn,如下,注意二分查詢的邊界 include include include using namespace std const int n 41000 i...
最長遞增子串行
這是微軟實習生筆試遇到的,題意 求乙個陣列中最長遞增子串行的長度。要求選擇該題最好演算法的時間複雜度和空間複雜度。答案 時間複雜度o nlgn 空間複雜度o n 這題明顯用動態規劃來解。假設在目標陣列array 的前i個元素中,以array i 元素為最大元素的遞增子串行的長度是lis i 那麼 遞...