【bzoj5125】[Lydsy12月赛]小Q的书架 dp优化
2018-01-01 18:58
441 查看
题解
http://www.lydsy.com/JudgeOnline/upload/201712/sol12.pdf
(我只是做个记录。。)
代码
#include<bits/stdc++.h> #define ll long long #define inf 1000000000 #define mod 65537 using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int n,t[40005],L=1,R=0,ans,a[40005],dp[40005],DP[40005],k; inline void add(int x,int y) { for (;x<=n;x+=x&-x)t[x]+=y; } inline int query(int x) { int ans=0; for (;x;x-=x&-x)ans+=t[x]; return ans; } inline void Move(int l,int r) { while (L<l){add(a[L],-1);ans-=query(a[L]-1);L++;} while (L>l){L--;add(a[L],1);ans+=query(a[L]-1);} while (R<r){R++;add(a[R],1);ans+=(R-L+1)-query(a[R]);} while (R>r){add(a[R],-1);ans-=(R-L)-query(a[R]);R--;} } void solve(int l,int r,int L,int R) { if (l>r) return; int mid=(l+r)>>1,MIN=1600000005,p=L; for (int i=L;i<=R&&i<mid;i++) { Move(i+1,mid); if (dp[i]+ans<MIN){MIN=dp[i]+ans;p=i;} } DP[mid]=MIN; solve(l,mid-1,L,p); solve(mid+1,r,p,R); } int main() { n=read();k=read();for (int i=1;i<=n;i++) a[i]=read(); for (int i=1;i<=n;i++) { Move(1,i);dp[i]=ans; } for (int i=1;i<k;i++) { solve(1,n,1,n); for (int i=1;i<=n;i++) dp[i]=DP[i]; } printf("%d",dp ); return 0; }
相关文章推荐
- 【dp-关于决策点】[Lydsy12月赛] BZOJ5124波浪序列 BZOJ5125小Q的书架
- BZOJ 5128([Lydsy12月赛]寻找母串-区间dp)
- [省选前题目整理][BZOJ 3675][APIO 2014]序列分割(斜率优化DP)
- 【BZOJ5072】[Lydsy十月月赛]小A的树 树形DP
- bzoj3594 方伯伯的玉米田 树状数组优化dp
- BZOJ3675 [Apio2014]序列分割 【斜率优化dp】
- BZOJ 1492 货币兑换Cash(CDQ分治+斜率优化dp)
- 【斜率优化DP】BZOJ4518 [Sdoi2016]征途
- BZOJ 1010 玩具装箱 toy (DP斜率优化)
- BZOJ 5072: [Lydsy十月月赛]小A的树 树形dp
- bzoj 4712: 洪水 树链剖分+线段树优化dp
- BZOJ 1911: [Apio2010]特别行动队 斜率优化dp
- BZOJ 2806: [Ctsc2012]Cheat 后缀自动机+单调队列优化DP
- bzoj 3711: [PA2014]Druzyny 分治+线段树优化dp
- _bzoj1911 [Apio2010]特别行动队【斜率优化dp】
- BZOJ3594 二维树状数组优化DP
- BZOJ 1264 Match 基因匹配 (dp 树状数组优化)
- BZOJ 3675 斜率优化DP
- BZOJ 2131 数据结构优化DP 解题报告
- [BZOJ1096][ZJOI2007]仓库建设(斜率优化dp)