博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 5125: [Lydsy1712月赛]小Q的书架
阅读量:5337 次
发布时间:2019-06-15

本文共 1771 字,大约阅读时间需要 5 分钟。

思路:
分治优化决策单调性dp
代码:

#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include
using namespace std;#define y1 y11#define fi first#define se second#define pi acos(-1.0)#define LL long long//#define mp make_pair#define pb push_back#define ls rt<<1, l, m#define rs rt<<1|1, m+1, r#define ULL unsigned LL#define pll pair
#define pli pair
#define pii pair
#define piii pair
#define pdd pair
#define mem(a, b) memset(a, b, sizeof(a))#define debug(x) cerr << #x << " = " << x << "\n";#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//headconst int N = 4e4 + 10;const int INF = 0x3f3f3f3f;int dp[N][11], s[N][11], a[N], bit[N], n, k, tot, l, r;inline void add(int x, int a) { while(x <= n) bit[x] += a, x += x&-x;}inline int sum(int x) { int ans = 0; while(x) ans += bit[x], x -= x&-x; return ans;}inline void move(int L, int R) { while(l < L) add(a[l++], -1), tot -= sum(a[l-1]-1); while(l > L) add(a[--l], 1), tot += sum(a[l]-1); while(r < R) add(a[++r], 1), tot += r-l+1-sum(a[r]); while(r > R) add(a[r--], -1), tot -= r-l+1-sum(a[r+1]);}void solve(int L, int R, int l, int r, int k) { if(L > R) return ; int mid = L+R >> 1, up = min(mid-1, r), id = up; dp[mid][k] = INF; for (int i = up; i >= l; --i) { move(i+1, mid); if(dp[i][k-1] + tot < dp[mid][k]) { dp[mid][k] = dp[i][k-1] + tot; id = i; } } solve(L, mid-1, l, id, k); solve(mid+1, R, id, r, k);}int main() { scanf("%d %d", &n, &k); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); for (int i = 1; i <= n; ++i) dp[i][0] = INF; l = 1, r = 0; for (int i = 1; i <= k; ++i) solve(1, n, 0, n-1, i); printf("%d\n", dp[n][k]); return 0;}

转载于:https://www.cnblogs.com/widsom/p/11498369.html

你可能感兴趣的文章
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>
HDU 1016 Prime Ring Problem(dfs)
查看>>
C#中结构体与字节流互相转换
查看>>
session和xsrf
查看>>
跟随大神实现简单的Vue框架
查看>>
Linux目录结构
查看>>
LeetCode-Strobogrammatic Number
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
五一 DAY 4
查看>>
(转)接口测试用例设计(详细干货)
查看>>
【译】SSH隧道:本地和远程端口转发
查看>>