首先將所有高度乘上10,設f[i]為將前i本書放入書架的最小高度,則
\[\begin
f[i]&=&\min(f[j-1]+first(j,i)+second(j,i)+w-(s[i]-s[j-1]))\\
&=&\min(f[j-1]+first(j,i)+second(j,i)+w-s[i]+s[j-1])\\
&=&\min(f[j-1]+first(j,i)+second(j,i)+s[j-1])+w-s[i]
\end\]
其中$1\leq j\leq i$且$s[i]-s[j-1]\leq w$。
設tmp[i][j]=f[j-1]+s[j-1]+first(j,i)+second(j,i),考慮用線段樹維護tmp[i][j],如果當前要計算f[i],那麼線段樹的第j個葉子節點就表示tmp[i][j]。
為了高效維護first和second,先將所有書按高度排序,從大到小插入到set中。
假設現在插入的是第x本書,那麼對於[pre(x)+1,x]內的i,first(i,x)均為a[x]。
對於[pre(pre(x))+1,pre(x)]內的i,以及[x,nxt(x)-1]內的j,second(i,j)均為a[x]。
對於[pre(x)+1,x]內的i,以及[nxt(x),nxt(nxt(x))-1]內的j,second(i,j)也均為a[x]。
於是在右端點的最小值處進行區間賦值操作即可。
時間複雜度$o(n\log n)$。
#include#include#include#define n 300010
using namespace std;
typedef long long ll;
int n,w,i,j,k,c[n],l[n],g[n],vl[n<<1],vr[n<<1],nxt[n<<1],ed;ll a[n],b[n],vw[n<<1],f;
sett;set::iterator it;
inline bool cmp(int x,int y)
inline void add(int x,int l,int r,ll w)
struct nodes[1050000];
inline void tag1(int x,ll p)
inline void tag2(int x,ll p)
inline void pb(int x)
if(s[x].t2)
}inline void up(int x)
void same1(int x,int a,int b,int c,int d,ll p)
pb(x);
int mid=(a+b)>>1;
if(c<=mid)same1(x<<1,a,mid,c,d,p);
if(d>mid)same1(x<<1|1,mid+1,b,c,d,p);
up(x);
}void same2(int x,int a,int b,int c,int d,ll p)
pb(x);
int mid=(a+b)>>1;
if(c<=mid)same2(x<<1,a,mid,c,d,p);
if(d>mid)same2(x<<1|1,mid+1,b,c,d,p);
up(x);
}void change(int x,int a,int b,int c,ll p)
pb(x);
int mid=(a+b)>>1;
c<=mid?change(x<<1,a,mid,c,p):change(x<<1|1,mid+1,b,c,p);
up(x);
}ll ask(int x,int a,int b,int c,int d)
int main()
for(i=j=1;i<=n;i++)
return printf("%lld.%d",f/10,f%10),0;
}
BZOJ2837 小強的形狀
離散化後通過樹狀陣列求出 b i 為i之前比它小的。c i 為i之前比它大的 i 1 i之前小於等於它的。d i 為i之後比它小的。e i 為i之後比它大的 n i f i f i 為i之後小於等於它的。則 cnt sum n b i e i cnt sum n c i d i cnt 將序列a翻轉...
BZOJ 5125 小Q的書架
小 q 有 n 本書,每本書有乙個獨一無二的編號,現在它們正零亂地在地上排成了一排。小 q 希望把這一排書分成恰好 k 段,使得每段至少有一本書,然後把每段按照現在的順序依次放到 k 層書架的每一層上去。將所有書都放到書架上後,小 q 這才突然意識到它們是亂序的,他只好把每一層的書分別按照編號從小到...
BZOJ1926 粟粟的書架(主席樹,字首和)
第一行是三個正整數r,c,m。接下來是乙個r行c列的矩陣,從上到下 從左向右依次給出了每本書的頁數pi,j。接下來m行,第i行給出正整數x1i,y1i,x2i,y2i,hi,表示第i天的指定區域是 x1i,y1i 與 x2i,y2i 間 的矩形,總頁數之和要求不低於hi。保證1 x1i x2i r,...