首页 技术 正文
技术 2022年11月20日
0 收藏 715 点赞 2,229 浏览 1924 个字

营业额统计

思路:

  每次,插入一个点;

  然后找前驱后继;

来,上代码:

#include <cmath>
#include <cstdio>
#include <iostream>using namespace std;#define maxn 33000
#define INF 0x7fffffffstruct TreeNodeType {
int w,key,opi,size,ch[];
};
struct TreeNodeType tree[maxn];int n,root,tot,X,ans;inline void updata(int now)
{
tree[now].size=tree[now].w;
if(tree[now].ch[]) tree[now].size+=tree[tree[now].ch[]].size;
if(tree[now].ch[]) tree[now].size+=tree[tree[now].ch[]].size;
}inline int getson(int now)
{
return tree[tree[now].opi].ch[]==now;
}inline void rotate(int now)
{
int opi=tree[now].opi,fopi=tree[opi].opi,pos=getson(now);
tree[opi].ch[pos]=tree[now].ch[pos^];
tree[tree[now].ch[pos^]].opi=opi;
tree[now].ch[pos^]=opi;
tree[now].opi=fopi;
tree[opi].opi=now;
if(fopi) tree[fopi].ch[tree[fopi].ch[]==opi]=now;
updata(opi),updata(now);
}inline void splay(int now)
{
for(int opi;opi=tree[now].opi;rotate(now))
{
if(tree[opi].opi) rotate(getson(now)==getson(opi)?opi:now);
}
root=now;
}inline void insert()
{
if(!root)
{
tree[++tot].key=X;
tree[tot].opi=;
tree[tot].w=tree[tot].size=;
tree[tot].ch[]=tree[tot].ch[]=;
root=tot;
}
else
{
int now=root,opi=;
while()
{
if(tree[now].key==X)
{
tree[now].w++;
tree[now].size++;
splay(now);
break;
}
opi=now,now=tree[now].ch[X>tree[now].key];
if(!now)
{
tree[++tot].key=X;
tree[tot].opi=opi;
tree[tot].w=tree[tot].size=;
tree[tot].ch[]=tree[tot].ch[]=;
tree[opi].ch[X>tree[opi].key]=tot;
splay(tot);
break;
}
}
}
}inline int pre()
{
if(tree[root].w>) return tree[root].key;
int now=tree[root].ch[];
if(now==) return INF;
while(tree[now].ch[]) now=tree[now].ch[];
return tree[now].key;
}inline int suc()
{
int now=tree[root].ch[];
if(now==) return INF;
while(tree[now].ch[]) now=tree[now].ch[];
return tree[now].key;
}inline void in(int &now)
{
register int if_z=;now=;
register char Cget=getchar();
while(Cget>''||Cget<'')
{
if(Cget=='-') if_z=-;
Cget=getchar();
}
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
now*=if_z;
}int main()
{
in(n),in(X);
ans=X,n--,insert();
while(n--)
{
in(X),insert();
int p=pre(),s=suc();
ans+=min(abs(X-p),abs(s-X));
}
cout<<ans;
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,812
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,894