description
給定乙個序列,初始為空。現在我們將1到n的數字插入到序列中,每次將乙個數字插入到乙個特定的位置。每插入乙個數字,我們都想知道此時最長上公升子串行長度是多少?
sample input
3 0 0 2
sample output
1 1
2這道題首先我們的思路是求出每個數放的位置,這個過程我們倒著插,是可以二分的。
然後再考慮求最長上公升子串行,用樹狀陣列維護全域性最大值。。。
#include
#include
using
namespace
std;
int _max(int x, int y)
int n, a[110000], s[110000];
int lowbit(int x)
void change1(int x, int c)
void change2(int x, int c)
int getsum(int x)
int getmax(int x)
int main()
change1(a[i], 1);
}int ans = 0;
memset(s, 0, sizeof(s));
for(int i = 1; i <= n; i++)
return
0;}
Tjoi2013 最長上公升子串行
time limit 10 sec memory limit 128 mb submit 2294 solved 1153 submit status discuss 給定乙個序列,初始為空。現在我們將1到n的數字插入到序列中,每次將乙個數字插入到乙個特定的位置。每插入乙個數字,我們都想知道此時最長...
P4309 TJOI2013 最長上公升子串行
給定乙個序列,初始為空。現在我們將1到n的數字插入到序列中,每次將乙個數字插入到乙個特定的位置。每插入乙個數字,我們都想知道此時最長上公升子串行長度是多少?因為每次插入的數是按順序從小到大的,所以我們可以從後往前計算 我們先用 vector 自帶的 insert 函式得到所有數都插入完後的序列,然後...
TJOI2018 最長上公升子串行
觀察題目 在第 i 輪操作時,將數字 i 插入 插入的數字是當前最大的 如果答案與上次不同,新的lis必以 i 結尾 以 i 結尾的lis無法再伸長 因為比 i 小的都插入完了 也就是說,加入 i 1 到 n 的數,不會對以 i 結尾的上公升子串行有影響,所以我們不用去動態地維護lis的大小,只需要...