splay 1296 营业额统计

有一个点超时,确实是个很简单的splay#include<cstdio>
#include<iostream>
using namespace std;
int n,shu[1000006][2],root,size,b1,b2,sum1,sum[1000005],zhi[1000005];
int fa[1000005];
void xuan(int a1)
{
	int a2,a3,l,r;
	a2=fa[a1];
	a3=fa[a2];
	if(a2==root)
	  root=a1;
	else
	  if(a2==shu[a3][0])
	    shu[a3][0]=a1;
	  else
	    shu[a3][1]=a1;
	if(shu[a2][0]==a1)
	  l=0;
	else
	  l=1;
	r=l^1;
	fa[a1]=a3;
	fa[a2]=a1;
	shu[a2][l]=shu[a1][r];
	shu[a1][r]=a2;
	fa[shu[a2][l]]=a2;
	return;
}
void zhuan(int a1)
{
	int a2,a3;
	for(;a1!=root;)
	  {
	  	a2=fa[a1];
	  	a3=fa[a2];
	  	if(a2!=root)
	  	  if(a2==shu[a3][0]^a1==shu[a2][0])
	  	    xuan(a1);
	  	  else
	  	    xuan(a2);
	  	xuan(a1);
	  }
}
void jia(int &a1,int a2,int a3)
{
	if(a1==0)
	  {
	  	size++;
	  	a1=size;
	  	zhi[a1]=a2;
	  	sum[a1]=1;
	  	fa[a1]=a3;
	  	zhuan(a1);
	  	return;
	  }
	if(zhi[a1]==a2)
	  sum[a1]++;
	else
	  if(zhi[a1]<a2)
	    jia(shu[a1][1],a2,a1);
	  else
	    jia(shu[a1][0],a2,a1);
	return;
}
void qian(int a1,int a2)
{
	if(a1==0)
	  return;
	if(zhi[a1]==a2)
	  b1=a2;
	else
	  if(zhi[a1]<a2)
	    {
	    	b1=zhi[a1];
	    	qian(shu[a1][1],a2);
		}
	  else
	    qian(shu[a1][0],a2);
	return;
}
void hou(int a1,int a2)
{
	if(a1==0)
	  return;
	if(zhi[a1]==a2)
	  b2=a2;
	else
	  if(zhi[a1]>a2)
	    {
	    	b2=zhi[a1];
	    	hou(shu[a1][0],a2);
		}
	  else
	    hou(shu[a1][1],a2);
	return;
}
int main()
{
	scanf("%d",&n);
	scanf("%d",&sum1);
	jia(root,sum1,0);
	for(int i=1;i<n;i++)
	  {
	  	int a1;
	  	scanf("%d",&a1);
	  	b1=-1;
	  	b2=-1;
	  	qian(root,a1);
	  	hou(root,a1);
	  	if(b1==-1)
	  	  sum1+=b2-a1;
	  	else
	  	  if(b2==-1)
	  	    sum1+=a1-b1;
	  	  else
	  	    if(a1-b1<=b2-a1)
	  	      sum1+=a1-b1;
	  	    else
	  	      sum1+=b2-a1;
	  	jia(root,a1,0);
	  }
	printf("%d",sum1);
	return 0;
}
时间: 2024-10-20 06:38:51

splay 1296 营业额统计的相关文章

CodeVS 1296 营业额统计

1296 营业额统计2002年 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证

treap 1296 营业额统计

有一个点答案错误,求大神指教 #include<cstdio>#include<iostream>#include<cstdlib>#include<ctime>using namespace std;struct shu{ int zhi,dui,l,r,sum1;}a[32768];int n,sum,root,size,ans;void qian(int a1,int a2){ if(a1==0)   return; if(a[a1].zhi==a2)

BZOJ 题目1588: [HNOI2002]营业额统计(Splay Tree 求前驱后继)

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 10828  Solved: 3771 [Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者

BZOJ1588 HNOI2002 营业额统计 [Splay入门题]

[HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4128  Solved: 1305 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业 额会出现一定的波动,当然一定的波动是能够接受

BZOJ 1588 营业额统计 Splay

主要操作为Splay中插入节点,查找前驱和后继节点. 1: #include <cstdio> 2: #include <iostream> 3: #include <cmath> 4: using namespace std; 5: #define MaxL 100005 6: #define INF 0x7ffffff 7: #define keyTree sp[sp[root].child[1]].child[0] 8:   9: struct SplayTree

BZOJ1588 营业额统计 splay tree

最基本的平衡树操作吧,第一次学splay的可以做一下 只需要插入,删除,旋转,求前驱,后继这5个操作吧 不喜欢用指针,用数组写的 <span style="color:#00cccc;">//HNOI2002营业额统计 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define INF 1<<30 #define

【BZOJ-1588】营业额统计 Splay

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 12485  Solved: 4508[Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其

Splay练习题 [台州学院 2924] 营业额统计

2924: 营业额统计   Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 416            Accepted:130 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况.Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其

BZOJ1588 [HNOI2002]营业额统计 splay模板

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 16189  Solved: 6482 [Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者