bzoj1588[HNOI2002]营业额统计——双向链表
2024-10-19 20:09:32
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1588
简单Splay。但用双向链表做。很好的思路。
1.(离线)按值排序,记下pre和nxt的位置;2.倒序,为了算完把它删掉以不影响前面。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,INF=1e7;
int n,a[N],pre[N],nxt[N],ans;
struct Node{
int val,bh;
}tp[N];
bool cmp(Node a,Node b){return a.val<b.val;}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]),tp[i].val=a[i],tp[i].bh=i;
sort(tp+,tp+n+,cmp);
for(int i=;i<=n;i++)pre[tp[i].bh]=tp[i-].bh,nxt[tp[i].bh]=tp[i+].bh?tp[i+].bh:n+;
a[n+]=INF;a[]=-INF;
for(int i=n;i>;i--)
{
ans+=min(a[i]-a[pre[i]],a[nxt[i]]-a[i]);
pre[nxt[i]]=pre[i];nxt[pre[i]]=nxt[i];
}
printf("%d",ans+a[]);
return ;
}
最新文章
- ubuntu 12.04下zmap安装
- 为窗体设置背景图片-UI界面编辑器(SkinStudio)教程
- androidactivity与webview结合
- Unity3D研究院之静态自动检查代码缺陷与隐患
- Copy-VMFile
- Java程序实现导出Excel,支持IE低版本
- c++:参数型别的推导
- hdu_4742_Pinball Game 3D(cdq分治+树状数组)
- RabbitMQ 默认端口号
- I2S协议
- linux下mongodb安装、服务器、客户端、备份、账户命令
- 快速失败(fail-fast)和安全失败(fail-safe)的区别
- bzoj千题计划312:bzoj2119: 股市的预测(后缀数组+st表)
- EL 快速开始
- 转:[大数据竞赛]协同过滤在这个问题上是否work
- 加速安装 Sharepoint 2013 SP1
- markdown 测试代码
- Linux开机启动文件rc.local无法执行怎么办?
- 【Discriminative Localization】Learning Deep Features for Discriminative Localization 论文解析(转)
- Mac Android8.0源码编译笔记
热门文章
- 使用jQuery插件jRemoteValidate进行远程ajax验证,可以自定义返回的信息
- C#中Abstract和Virtua笔记,知识
- Mac上安装第三方应用显示包资源破坏解决办法
- widow系统 LuaForWindows,安装 luasocket
- iOS开发之解决CocoaPods中“.h”头文件找不到的问题,简单粗暴的方法
- angular 动态修改 ng-bind-html
- XCOde 5 的界面布局一些新特性
- iOS-----AVFoundation框架的功能详解
- vue中使用less
- 【剑指offer】找出数组中任意一个重复的数字,C++实现