POJ3666 nlogn 做法

2024-03-02 07:58
文章标签 做法 nlogn poj3666

本文主要是介绍POJ3666 nlogn 做法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

呜呜呜我再也不会放弃一个我能理解的题了!就算花几个小时!就算手里还有很多题!

给你一个序列,每次操作你可以让一个数加一或者让一个数减一,问使这个序列不减的最小操作数(具体是啥我也不想看了,大概就是这样,如果是严格递增a[i] - i就变成了不减)

然后有一个结论是改变之后的序列的每个数,一定是原来序列中的某个数。那么离散化之后的n ^2 DP就很显然了

但是!!有一个极其巧妙的nlogn的解法,不太想写sol了,因为这个博客写的太好了

https://blog.csdn.net/lycheng1215/article/details/80089004

有一个值得修改的地方就是xi 是f(x)第一个取最小值时的x

其实从感性来理解挺好想的,严谨的证明就比较难懂了,不过严格来讲还是得看懂证明。

然后就是POJ3666的代码:

int a[maxn];
priority_queue<int> q;int main()
{int n; scanf("%d", &n);rep(i, 1, n) scanf("%d", a + i);int ans1 = 0;rep(i, 1, n){q.push(a[i]);if(!q.empty() && q.top() > a[i]){ans1 += q.top() - a[i];q.pop();q.push(a[i]);}}reverse(a + 1, a + n + 1);while(!q.empty()) q.pop();int ans2 = 0;rep(i, 1, n){q.push(a[i]);if(!q.empty() && q.top() > a[i]){ans2 += q.top() - a[i];q.pop();q.push(a[i]);}}printf("%d\n", min(ans1, ans2));return 0;
}

over

这篇关于POJ3666 nlogn 做法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765433

相关文章

贪心问题n位数删除s位94页第3种做法

// 贪心问题n位数删除s位94页第3种做法.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//2024-4-15#include <iostream>#include<string>using namespace std;void del(char n[],int b,int k,int& len){for (int i = b; b < len - k;i+

最长上升子序列 二分做法

给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤10001≤N≤1000, −109≤数列中的数≤109−109≤数列中的数≤109 输入样例: 73 1 2 1 8 5 6 输出样例: 4 二分做出的答案只有数量是最长上升子

P3313 [SDOI2014] 旅行(分块做法)

~~~~~      P3313 [SDOI2014] 旅行 ~~~~~      总题单链接 思路 ~~~~~      遇到这种树上路径问题,就考虑用重链剖分转为区间问题。 ~~~~~      问题转换为了:给定一个区间和 k k k,求这个区间内信仰为 k k k 的城市的 权值和 或 最大权值。 ~~~~~      这个问题也可以用动态开点线段树解决(现在不会,以后

算法-排序算法:堆排序(HeapSort )【O(nlogn)】

MyArray.java /*** 数组** @author* @version 2018/8/4*/public class MyArray<E> {private E[] arr;private int size;public MyArray(int capacity){arr = (E[])new Object[capacity];size = 0;}public MyArray() {

无主灯吊顶的精致做法:打造光影艺术的居家空间

在现代家居设计中,无主灯吊顶以其独特的照明效果和空间层次感,逐渐成为追求高品质生活人群的首选。无主灯设计不仅能够有效避免传统主灯带来的刺眼感,还能通过多点光源的巧妙布局,营造出温馨、舒适的居家氛围。作为无主灯照明灯具的源头工厂,我们深知这一领域的精髓,今天就来详细解析无主灯吊顶的几种精致做法,并分享我们的专业见解。 一、左边悬浮设计 左边悬浮设计是一种极具现代感的吊顶方案。通过四周安装

九度oj的入门做法

由于看到很多同学发帖提问关于一些基本的OJ的操作,并且我为了给我的一个同学总结一个做题流程, 所以我总结了一下对于刚接触九度OJ的同学算是一个入门的小教程。 如果以前接触过acm的同学可以不用看了。 1.网址 :ac.jobdu.com 2.如果以前是王道论坛的用户,直接输入那个账号和密码就行。   如果不是的话,可以在首页新注册一个。 3.做题:

#1128 : 二分·二分查找 ( 两种方法 先排序在二分O(nlogN) + 直接二分+快排思想O(2N) )

#1128 : 二分·二分查找 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Nettle最近在玩《艦これ》,因此Nettle收集了很多很多的船(这里我们假设Nettle氪了很多金,开了无数个船位)。去除掉重复的船之后,还剩下N(1≤N≤1,000,000)种不同的船。每一艘船有一个稀有值,任意两艘船的稀有值都不相同,稀有值越小的船越稀

谷歌发表“移动AR设计的最佳做法”

本文英语原文由UX设计师 Alesha Unpingco 所作。 52VR修正了原译文的翻译错误并作润饰编辑。 在过去数年中,许多人已经通过谷歌Cardboard、Daydream View,以及 Oculus Rift 和 HTC Vive 这样的高端头显体验了虚拟现实。现在,增强现实有机会直接通过用户的移动设备来到他们身边。AR可以直接将信息呈现在用户视场之中,这种数字信息可

悬浮标题Listview的简单做法

在Listview里面添加一个长的和要悬浮的项长的一模一样的项。 需要悬浮的项先隐藏,当长的一模一样的listview中的项离开屏幕后就将悬浮项显示。 注意各个控件的排放顺序。 mGroupListView.addHeaderView(View.inflate(getActivity(), R.layout.fragment_friend_header, null)); mGroup

调用某类时,不用导此类头文件的做法

我是iOS开发,在类比较多,功能比较多的项目中,调用某类时,可以不用导头文件调用。这样就可以避免,因头文件多次被导入,而产生错误。一般很少使用。        做法为:即可得到类本身    Class vc = NSClassFromString(@"xxxxViewController");    获得此类对象,一般用    id object = [[vc al