YbtOJ 493 最大分數 斜率優化dp,分治

2022-03-29 04:01:45 字數 2030 閱讀 4592

\(n\)個數的乙個序列,給其中的一些數打上標記。

乙個標記方案的貢獻為\(s_1\)表示有多少對\(l,r\)滿足區間\([l,r]\)都被打上了標記,\(s_2\)表示標記的數字和。貢獻為\(s_1-s_2\)

\(m\)次詢問,修改乙個數後,求最大的可能貢獻(詢問之間相互獨立)

\(1\leq n,m\leq 3\times 10^5\)

先把答案減去乙個\(\sum_^na_i\),這樣就變為對於一段\([l,r]\)要麼選擇\(s_1\)要麼選擇\(s_2\)

先考慮不帶修改怎麼搞,設\(f_i\)表示前\(i\)個的最大貢獻。

定義\(s_i=\sum_^ia_i\)然後有方程

\[f_i=max\\}\}

\]這個東西可以斜率優化搞(考場上犯病寫了個\(cdq\),調了我半天)

然後帶修改,考慮到每次只會影響乙個數字,可以理解為乙個字首和字尾拼起來。把剛剛那個\(dp\)再反過來做一次記為\(g_i\)。

那麼現在對於修改的位置\(x\),我們要麼選擇\(x\),要麼跨過\(x\),也就是最大化

\[max\-s_j,f_j+g_i+\binom\}(i\in[0,x-1],j\in[x+1,n+1])

\]前面那個可以把兩個前/字尾的max的\(f_j-s_j\)和\(g_i+s_\)加起來就好了。

後面那個考慮分治,我們每次分治到乙個位置\([l,mid,r]\),如果需要往左走就統計\(i\in[0,l-1]\)和\(j\in[mid+1,r]\)的答案。右邊同理。

因為我們的每次的時間複雜度是外面的大小,所以我們可以維護乙個前字尾的凸殼,然後在上面二分時間複雜度就是\(o(n\log^2 n)\)的。

同時維護兩個凸殼需要回溯所以很麻煩,分開兩次正反做一次就好了。

時間複雜度\(o(n\log^2 n)\)

(考場**,有點醜)

#include#include#include#include#define ll long long

using namespace std;

const ll n=3e5+10,inf=1e18;

ll n,m,ans,lmax,rmax,top,st[n],suf[n];

ll a[n],f[n],g[n],s[n],prt[n],w[n],yf[n];

vectorq[n];

ll px(ll x,ll *f)

ll xj(ll x1,ll y1,ll x2,ll y2)

ll xl(ll a,ll b,ll c,ll *f)

ll ck(ll l,ll r,ll *f)

ll solve(ll l,ll r,ll *f)

for(ll i=mid+1;i<=r;i++)

ll mid=(l+r)>>1,pa=ans;

if(top)

ans=max(ans,cw(st[l],i));

} }calc(l,mid);ans=pa;

calc(mid+1,r);

return;

}void cblc(ll l,ll r)

ll mid=(l+r)>>1,pa=ans;

if(top)

ans=max(ans,cw(i,st[l]));

} }cblc(mid+1,r);ans=pa;

cblc(l,mid);

return;

}signed main()

pre=max(pre,f[i]-s[i]); }

ans=-inf;top=0;

for(ll i=1;i<=n;i++)yf[i]=f[i]*2+i*i+i;calc(0,n+1);

ans=-inf;top=0;

for(ll i=1;i<=n;i++)yf[i]=g[i]*2+(n-i+1)*(n-i+1)+(n-i+1);

cblc(0,n+1);

for(ll i=1;i<=m;i++)

printf("%lld\n",max(prt[i],0ll));

return 0;

}

YbtOJ 最大均值

因此,這個 text 就是所求的最大的平均值 將上個轉化來的問題繼續轉換 既然上個問題中是使平均值不小於 text 那麼如果將 a 序列的所有值都減去 text 那麼問題又變成了 是否存在乙個長度不小於 l 的子段,子段和非負 子段和可以通過字首和相減得到,即設 text i 為 a 1,a i 的...

YbtOJ20029 最大權值

作為今天膜你抄模擬賽上唯一切掉的題目,小w在此氵一篇題解。比賽中的題目,題庫還沒有 有乙個長度為 n 的實數序列,下標從 1 開始,其中第 k 個位置的實數為 p cdot sin a cdot k b cos c cdot d 2 sin 和 cos 採用弧度制,其中 p,a,b,c,d 均為給定...

YbtOj練習 貪心 1最大積分

這道題的題意描述有問題。問題很大,導致我wa了無數次。如果看這句話很容易就會理解錯。在我wa了n次之後看到了這兩個字,哦豁,原來這裡的意思是當你在第i級時,如果買的總件數達到了t i 那麼就可以公升級。includeusing namespace std typedef unsigned long ...