[题解][HNOI2002][Luogu P2234] 营业额统计

题目描述

[HNOI2002][Luogu P2234] 营业额统计

题目大意

给定 n 个整数,求每个数和它之前的数的差的绝对值的最小值之和。

题解

暴力是 O(n2) ,本来能卡过的,结果被洛谷改小了时限。
想到对于每个数要快速找到离它最近的数,而平衡树的前驱后继正好满足要求。
可以用vector当平衡树
(multiset也行)

code

785B, 481ms

#include <algorithm>
#include <vector>
#include <cstdio>

#define MAXINT 0x7fffffff
using namespace std;

int Aabs(int x) {
    return x >= 0 ? x : -x;
}

int main() {
    vector<int> tree;
    tree.push_back(-MAXINT);

    int n, ans = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        int x;
        scanf("%d", &x);
        if (i == 1) {
            ans += x;
        } else {
            int a = *--lower_bound(tree.begin(), tree.end(), x);
            int b = *lower_bound(tree.begin(), tree.end(), x);
            if (a == -MAXINT)
                ans += Aabs(b - x);
            else
                ans += min(Aabs(a - x), Aabs(x - b));
        }

        tree.insert(upper_bound(tree.begin(), tree.end(), x), x);
    }
    printf("%d\n", ans);
    return 0;
}
posted @   方而静  阅读(106)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示