笔记
【问题描述】
给定一个长度为m的序列a,下标编号为1~m。序列的每个元素都是1~n的
整数。定义序列的代价为

m−1

∑|ai+1-ai|

i=1

你现在可以选择两个数x和y,并将序列a中所有的x改成y。x可以与y相等。
请求出序列最小可能的代价。
【输入格式】
输入第一行包含两个整数n和m。第二行包含m个空格分隔的整数,代表序
列a。
【输出格式】
输出一行,包含一个整数,代表序列最小的代价。
【样例输入 1】
4 6
1 2 3 4 3 2
【样例输出 1】
3
【样例输入 2】
10 5
9 4 3 8 8
【样例输出 1】
6
【样例解释】
样例 1 中,最优策略为将 4 改成 3。

样例 2 中,最优策略为将 9 改成 4。
【数据规模和约定】
对于30%的数据,n,m<=100.
对于60%的数据,n,m ≤ 2000。
对于100%的数据,1 ≤ n,m ≤ 100,000。

暴力可过6个点 也就是30分。

满分做法是寻找附近的元素,记录贡献值。

代码为满分做法

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <ios>
#include <vector>
using namespace std; typedef long long ll; const int N = (int)1e5; int n, m, a[N + ];
vector<int> b[N + ]; int main(int argc, char *argv[]) {
// freopen("note.in", "r", stdin);
// freopen("note.out", "w", stdout); ios :: sync_with_stdio(false);//让cin跑快点。(别轻易用)
cin >> n >> m;
for (int i = ; i <= m; ++i) cin >> a[i];
for (int i = ; i <= m; ++i) {
if (i > && a[i - ] != a[i]) b[a[i - ]].push_back(a[i]);
if (i < m && a[i + ] != a[i]) b[a[i + ]].push_back(a[i]);
}//找附近的元素。 ll ans = 0LL, sum = 0LL;
for (int i = ; i <= n; ++i) {
if (!b[i].size()) continue;
sort(b[i].begin(), b[i].end());
int y = b[i][b[i].size() >> ];
ll before = 0LL, after = 0LL;
for (int j = ; j < b[i].size(); ++j) {
before += abs(i - b[i][j]);
after += abs(y - b[i][j]);
}
ans = max(ans, before - after), sum += before;
} cout << sum / - ans << endl;//因为加了两边,所以/2。 fclose(stdin);
fclose(stdout);
return ;
}

最新文章

  1. 查询Sqlserver数据库死锁的一个存储过程
  2. MES系统学习
  3. Python:常见操作字符串的函数
  4. 在stream流和byte[]中查找(搜索)指定字符串
  5. JS正则表达式验证数字非常全
  6. 用cmd改计算机名.bat 无需重启电脑生效
  7. ASP.NET网站怎么发布 Web项目程序怎么发布部署(暂时收藏)
  8. Vue 普通对象数据更新与 file 对象数据更新
  9. hdu--1018--Big Number(斯特林公式)
  10. hadoop搭建在Ubuntu16.04上
  11. CSS中新属性calc()
  12. Oracle ADF 开发必读
  13. 在.NET Core中使用简单的插件化机制
  14. bzoj 1208: [HNOI2004]宠物收养所 (Treap)
  15. 关于python中loc和iloc方法
  16. 《玩转Django2.0》读书笔记-Django建站基础
  17. bzoj 2115 Xor - 线性基 - 贪心
  18. JS参数转发
  19. JSP 基础(二)
  20. Codeforces Round #298 (Div. 2) C. Polycarpus&#39; Dice 数学

热门文章

  1. 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
  2. jQuery 更改checkbox的状态,无效
  3. Git从零教你入门(4):Git服务之 gogs部署安装
  4. JavaScript Patterns 5.6 Static Members
  5. 弹出层在兼容模式和IE8模式下显示不正常
  6. Storm系列(三):创建Maven项目打包提交wordcount到Storm集群
  7. Java api 入门教程 之 JAVA的Random类
  8. 绕过校园网的共享限制 win10搭建VPN服务器实现--从入门到放弃
  9. 基于Qt5.5.0的sql,C++备忘录软件的编写
  10. windows文件关联、打开方式列表之修改注册表攻略