「BZOJ 1831」「AHOI 2008」逆序对「贪心」
题意
给定一个长度为\(n\),值域为\([1,k]\),某些位置不确定的数组,求最小的逆序对。\(n\leq 10^4, k \leq 100\)
题解
这题有人用前缀和优化\(dp\)过了,但是这里还是讲一种逐一填的做法
首先证明:填进去的数一定是单调不减的,换句话说不构成逆序对。证明很简单,因为假设在\(i\),\(j\)两处(\(i < j\)),填进去的数构成逆序对,交换这\(i, j\),不影响\([1, i - 1],[j + 1, n]\)的逆序对,对于\([i + 1, j - 1]\)来说逆序对减少或不变,并且\(i,j\)构成的逆序对消失。
所以我们只要考虑已经填好的数。每次找到一个贡献最小的\(k\)填就行了。
我用树状数组维护了一下,实际上直接数组也可以。
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 1e4 + 10;
int n, k, a[N], bit[2][N];
void add(int z, int x, int y) {
for(; x <= k; x += x & (-x)) bit[z][x] += y;
}
int qry(int z, int x) {
int ans = 0;
for(; x >= 1; x &= x - 1) ans += bit[z][x];
return ans;
}
int main() {
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i ++) {
scanf("%d", a + i);
if(~ a[i]) add(1, a[i], 1);
}
int ans = 0;
for(int i = 1; i <= n; i ++) {
if(a[i] == -1) {
int x = 1, y = n << 1;
for(int j = 1; j <= k; j ++) {
int s = qry(0, k) - qry(0, j) + qry(1, j - 1);
if(s < y) y = s, x = j;
}
a[i] = x;
add(0, a[i], 1);
} else add(0, a[i], 1), add(1, a[i], -1);
ans += qry(0, k) - qry(0, a[i]);
}
printf("%d\n", ans);
return 0;
}
「BZOJ 1831」「AHOI 2008」逆序对「贪心」的更多相关文章
- 「杂烩」精灵魔法(P1908逆序对弱化版)
「杂烩」精灵魔法(P1908逆序对弱化版) 题面: 题目描述 \(Tristan\)解决了英灵殿的守卫安排后,便到达了静谧的精灵领地--\(Alfheim\) .由于$ Midgard$ 处在$ Al ...
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
2789: [Poi2012]Letters Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 278 Solved: 185[Submit][Stat ...
- bzoj 3744 Gty的妹子序列 区间逆序对数(在线) 分块
题目链接 题意 给定\(n\)个数,\(q\)个询问,每次询问\([l,r]\)区间内的逆序对数. 强制在线. 思路 参考:http://www.cnblogs.com/candy99/p/65795 ...
- BZOJ 2058 [Usaco2010 Nov]Cow Photographs:逆序对【环上最小逆序对】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2058 题意: 给你一个由1~n组成的排列,首尾相接围成一个环. 你可以任意次交换其中两个相 ...
- 「BZOJ 4228」Tibbar的后花园
「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...
- 「BZOJ 3645」小朋友与二叉树
「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...
- 「BZOJ 4502」串
「BZOJ 4502」串 题目描述 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合 \(S\),然后它们定义一个字符串为"好"的,当且仅当它可以被分成非空的两段,其中每一段 ...
- 「BZOJ 4289」 PA2012 Tax
「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \( ...
- 「BZOJ 2534」 L - gap字符串
「BZOJ 2534」 L - gap字符串 题目描述 有一种形如 \(uv u\) 形式的字符串,其中 \(u\) 是非空字符串,且 \(v\) 的长度正好为 \(L\), 那么称这个字符串为 \( ...
随机推荐
- unix下网络编程之I/O复用(三)
poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll.poll提供的功能与select类似,不过在处理流设备时, ...
- 刷题常用的STL容器总结
本文归纳总结刷题常用到STL容器以及一些标准算法,主要包括: string.vector.map.pair.unordered_map.set.queue.priority_queue.stack,以 ...
- Oracle 内存结构
内存结构 Oracle内存,进程与数据库的图 sga:系统全局区,用来存放操作的数据,库缓存,数据字典等控制信息的内存区域, pga:进程全局区,服务进程专用的内存区域,大多数内容非共享 uga:用 ...
- PostgreSQL 监控数据库活动
监控数据库活动 1. 标准Unix 工具 [root@mysqlhq ~]# ps auxww | grep ^postgrespostgres 12106 0.0 0.0 340060 15064 ...
- iOS消息转发机制
iOS消息转发机制 “消息派发系统”(message-dispatch system) 若想令类能够理解某条消息,我们必须实现出对应的方法才行.但是,在编译器向类发送其无法解读的消息时并不会报错,因为 ...
- S2-045漏洞利用工具&解决方案
简单的重复造一个轮子,漏洞危害蛮大的 影响版本:Struts 2.3.5 - Struts 2.3.31,Struts 2.5 - Struts 2.5.10 仅供学习测试使用,严禁非法操作! 下载链 ...
- Centos 7.2 安装稳定版 nginx
1. 创建适用于RHEL/CentOS系统的安装源文件,位置为: /etc/yum.repos.d/nginx.repo , 并写入以下内容: [nginx] name=nginx repo base ...
- 如何删除offline数据文件/表空间上的分区
接上一篇"Oracle 10g RAC全库flashback " http://www.cnblogs.com/cqubityj/p/3265552.html 在打开数据库之前把2 ...
- Nginx配置文件中文注释详解
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...
- DDD学习笔录——提炼问题域之知识提炼与协作
提炼问题域的意义 理解一个复杂问题域以便创建简单且有用的模型需要深入详尽的知识以及深刻的见解,这些只能通过与从内到外理解该领域的人协作得到.对模型的设计进行连续实验和探究正是DDD的能力所能实现的.只 ...