BZOJ3461 Jry的時間表

2021-09-07 00:17:59 字數 960 閱讀 5182

fl[i]表示[1,i]操作一次,且在[j+1,i]處操作的最大值

1:把[j+1,i]改為b[i]:

max(sum[j]+b[i]*(i-j))

=b[i]*i+max(-j*b[i]+sum[j])(0<=j由於j遞增,-j遞減,所以從右往左建立凸殼,查詢時在凸殼上二分查詢即可,時間複雜度$o(n\log n)$。

2:把[j+1,i]改為b[j]:

max(sum[j]+b[j+1]*(i-j))

=max(b[j+1]*i+sum[j]-b[j+1]*j)(0<=j考慮分治,對[l,mid]按b[j+1]從小到大排序,然後斜率優化即可,時間複雜度$o(n\log^2n)$。

將a,b序列翻轉,即可求出fr[i]。

ans=max(fl[i]-sum[i]+fr[j]+sum[j-1])(0<=i=max(fr[j]+sum[j-1]+max(fl[i]-sum[i]))

維護字首最大的fl[i]-sum[i]即可。

#include#include#define n 500010

typedef long long ll;

int n,i,j,a[n],b[n],c[n],e[n],q[n],h,t;ll sum[n],d[n],f[n],fl[n],fr[n],pre,ans;

inline void read(int&a)

inline double pos(int x,int y)

inline ll ask(int x)

return sum[q[fin]]-(ll)q[fin]*x;

}inline void up(ll&x,ll y)

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

for(i=0;isolve(0,n);

}int main()

return printf("%lld",ans),0;

}

cyk的時間表

problem description 從前有座山,山理 有座廟,廟裡有個 cyk 和 blue blue 天天纏著 cyk cyk 天天躲著 blue 對於 cyk 的高冷,blue 只能從 cyk 的日常活動入手,於是他找來了 cyk 手機上的日常活動安排,發現 cyk 每天必做 n 件事,但是...

程式語言cyk的時間表

time limit 1000ms memory limit 65536kb submit statistic problem description 從前有座山,山理 有座廟,廟裡有個 cyk 和 blue blue 天天纏著 cyk cyk 天天躲著 blue 對於 cyk 的高冷,blue 只...

好老公的作息時間表

6 30 起床 起床之後,一定要吻一下正在熟睡的老婆的臉,但動作要輕,不得吵醒老婆 6 35 7 00 煅煉身體 在老婆要抱的時候,可以輕易抱上七樓 在老婆受到欺負的時候 可以以一敵十 7 00 7 30 做早餐 花樣一定要多,麵包 牛奶 雞蛋,豆漿 油條 公尺粉,包子 饅頭 稀飯,不得有重複 7 ...