多打打不同的比赛,找经验啊
题目4 : 不上升序列
描述
给定一个长度为 n 的非负整数序列 a[1..n]。
你每次可以花费 1 的代价给某个 a[i] 加1或者减1。
求最少需要多少代价能将这个序列变成一个不上升序列。
输入
第一行一个正整数 n。
接下来 n 行每行一个非负整数,第 i 行表示 a[i]。
1 ≤ n ≤ 500000
0 < a[i] ≤ 109
输出
一个非负整数,表示答案。
样例解释
[5,3,4,5] -> [5,4,4,4]
- 样例输入
-
4 5 3 4 5
- 样例输出
-
2
hiho的代码#include <bits/stdc++.h> using namespace std; long long c,n,k; priority_queue<int,vector<int>, greater<int> >a; int main(){ cin>>n; for(int i=0;i<n;i++){ cin>>c; a.push(c); if(a.top()<c){ k+=c-a.top(); a.pop(); a.push(c); } } cout<<k; return 0; }
变成相反数,不用重载写起来舒服的
#include <bits/stdc++.h> using namespace std; long long c,n,k; priority_queue<int>a; int main() { cin>>n; for(int i=0; i<n; i++) { cin>>c; c=-c,a.push(c); if(a.top()>c)k+=a.top()-c,a.pop(),a.push(c); } cout<<k; return 0; }
大佬们都讲是原题,找了下这个题
time limit per test1 secondmemory limit per test64 megabytesinputstandard inputoutputstandard outputLittle Petya likes to play very much. And most of all he likes to play the following game:
He is given a sequence of N integer numbers. At each step it is allowed to increase the value of any number by 1 or to decrease it by 1. The goal of the game is to make the sequence non-decreasing with the smallest number of steps. Petya is not good at math, so he asks for your help.
The sequence a is called non-decreasing if a1 ≤ a2 ≤ ... ≤ aN holds, where N is the length of the sequence.
InputThe first line of the input contains single integer N (1 ≤ N ≤ 5000) — the length of the initial sequence. The following N lines contain one integer each — elements of the sequence. These numbers do not exceed 109 by absolute value.
OutputOutput one integer — minimum number of steps required to achieve the goal.
Examplesinput5
3 2 -1 2 11output4
input5
2 1 1 1 1output1
CF的这道题代码如下#include <bits/stdc++.h> using namespace std; long long c,n,k; priority_queue<int>a; int main(){ cin>>n; for(int i=0;i<n;i++){ cin>>c; a.push(c); if(a.top()>c){ k+=a.top()-c; a.pop(); a.push(c); } } cout<<k; return 0; }