給定乙個序列,初始為空。現在我們將1到n的數字插入到序列中,每次將乙個數字插入到乙個特定的位置。每插入乙個數字,我們都想知道此時最長上公升子串行長度是多少?
第一行乙個整數n,表示我們要將1到n插入序列中,接下是n個數字,第k個數字xk,表示我們將k插入到位置xk(0<=xk<=k-1,1<=k<=n)
n行,第i行表示i插入xi位置後序列的最長上公升子串行的長度是多少。
因為後插進去的優先順序更高,考慮倒序解決這個問題。
通過倒序插入確定了每乙個點的真正位置。
不過需要注意後面已經插入的對前面的影響。
所以通過二分確定位置pos。
答案pos=後面在位置pos前插的個數+這次操作插的位置x
然後按正常逆序對做就行了。
#include
using
namespace std;
int a[
210010
],n;
int pos[
210010];
int sum[
210010];
int p[
210010];
intlowbit
(int x)
void
add(
int pos,
int x)
void
add1
(int x)
intquery
(int x)
intquery1
(int x)
intget
(int x)
return ans;
}int
main()
for(
int i=
1;i<=n;i++)}
/*751
1100
2*/
P4309 TJOI2013 最長上公升子串行
給定乙個序列,初始為空。現在我們將1到n的數字插入到序列中,每次將乙個數字插入到乙個特定的位置。每插入乙個數字,我們都想知道此時最長上公升子串行長度是多少?因為每次插入的數是按順序從小到大的,所以我們可以從後往前計算 我們先用 vector 自帶的 insert 函式得到所有數都插入完後的序列,然後...
洛谷P4304 TJOI2013 攻擊裝置 題解
最大獨立集 總點數 最大匹配數 獨立集 點集,圖中選一堆點,這堆點兩兩之間沒有連邊 最大獨立集 盡可能多得選點,使得其滿足獨立集的性質 這是網路流二分圖經典題目,值得練習 include include include using namespace std int x 9 int y 9 stru...
洛谷3962 TJOI2013 數字根
乙個數字的數字根定義為 這個數字每一位的數字加起來求和,反覆這個過程直到和小於10。例如,64357的數字跟為7,因為6 4 3 5 7 25,2 5 7個區間的數字根定義為這個區間所有數字和的數字根。給定乙個序列a1,a2,a3,an,你需要回答一些詢問。每乙個詢問給定個區間 l,r 求出這個區間...