abc047d
https://atcoder.jp/contests/abc047/tasks/arc063_b
// https://atcoder.jp/contests/abc047/tasks/arc063_b
// 最大利润 : 仅在一个点买入最多, 在另一个点全部卖出; 使得两个点间的价值差最大
// 求出这个最大的价值差, 以及能够产生这个价值差的买入点 (可能有多个, 这里设为num个)
// 则答案即为 num, 将这num个买入点的价格都 +1
// 注意: 买入点与卖出点是成对的, 因而不改变买入点而改变卖出点的价格, 操作代价不会更优
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int a[N]; // 输入
int b[N]; // i+1 ~ n 的 a 的最大值
int c[N]; // b[i] - a[i]
void solv()
{
int n, t;
cin >> n >> t;
for (int i = 1; i <= n; i ++) cin >> a[i];
// 增加最小值
int maxc = 0;
for (int i = n; i >= 1; i --)
{
b[i] = max(b[i + 1], a[i + 1]);
c[i] = b[i] - a[i];
maxc = max(maxc, c[i]);
}
int ans1 = 0;
for (int i = 1; i <= n; i ++) if (c[i] == maxc) ans1 ++;
// // 减小最大值
// maxc = 0;
// a[0] = b[0] = 2e9;
// for (int i = 1; i <= n; i ++)
// {
// b[i] = min(b[i - 1], a[i - 1]);
// c[i] = a[i] - b[i];
// maxc = max(maxc, c[i]);
// }
// int ans2 = 0;
// for (int i = 1; i <= n; i ++) if (c[i] == maxc) ans2 ++;
// cout << min(ans1, ans2) << endl;
cout << ans1 << endl;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int T = 1;
// cin >> T;
while (T --)
{
solv();
}
return 0;
}
本文来自博客园,作者:O2iginal,转载请注明原文链接:https://www.cnblogs.com/o2iginal/p/17493190.html