BZOJ4282 慎二的隨機數列

2021-09-07 02:48:24 字數 873 閱讀 5900

首先在開頭加上-inf,結尾加上inf,最後答案減2即可。

設s[i]為i之前未知的個數,f[i]為以i結尾的lis,且a[i]已知,那麼:

f[i]=max(f[j]+min(s[i]-s[j],a[i]-a[j]-1))+1,其中j將min分類討論後可轉化為三維偏序,cdq分治+掃瞄線+樹狀陣列即可,時間複雜度$o(n\log^2n)$。

#include#includeusing std::sort;

const int n=100010,inf=1000000000;

char ch[5];

int n,m,i,a[n],s[n],b[n],c[n],b[n],c[n<<1],f[n],g[n];

int qa[n],qb[n],ca,cb,t,pos0[n],bit0[n],pos1[n<<1],bit1[n<<1];

inline int cmp(int x,int y)

inline int lowerc(int x)

inline void up(int&a,int b)

ask0(f[qb[i]],b[qb[i]]-1);

ask1(g[qb[i]],lowerc(c[qb[i]]));

} solve(mid+1,r);

}int main()

s[++m]=i,a[m]=inf;

for(n=0,i=1;i<=m;i++)

sort(b+1,b+m+1),sort(c+1,c+n+1);

for(i=1;i<=m;i++)b[i]=lowerb(b[i]);

solve(1,m);

return printf("%d",f[m]-2),0;

}

BZOJ4282 慎二的隨機數列

省選前刷水記錄 構造 很顯然我們要讓那些未知的都加入最終答案 這樣子答案才最大 然後就很簡單了。很奇怪的是本地int main 不加int不會報錯 oj上會ce include include include using namespace std define ll long long int c...

BZOJ 4282 慎二的隨機數列 動態規劃

顯然隨機的數全部屬於上公升序列肯定能構造出最優解,那麼直接認為隨機的數都在最優解中。如果是求最長不上公升子串行的話就直接去掉所有的隨機數求一遍然後加上隨機數的個數。現在是讓求最長上公升子串行,只需把每個數都減去前面隨機的數的個數然後求一遍再加上隨機數的個數即為答案!include include i...

BZOJ 4282 慎二的隨機數列 動態規劃

間桐慎二是間桐家著名的廢柴,有一天,他在學校隨機了一組隨機數列,準 備使用他那強大的人工智慧求出其最長上公升子串行,但是天有不測風雲,人有旦 夕禍福,柳洞一成路過時把間桐慎二的水杯打翻了 現在給你乙個長度為 n 的整數序列,其中有一些數已經模糊不清了,現在請 你任意確定這些整數的值,使得最長上公升子...