Tjoi2013 最長上公升子串行 樹狀陣列 二分

2021-08-18 22:02:19 字數 732 閱讀 5492

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的大小,只需要...