博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1110 [ZJOI2007]报表统计
阅读量:7114 次
发布时间:2019-06-28

本文共 3560 字,大约阅读时间需要 11 分钟。

6个点ac

#include
#include
#include
#include
#include
using namespace std;struct node* nil;struct node{ int val; int size; int num; int key; node *ch[2];};void sum(node* &now){ now->size=now->num+now->ch[0]->size+now->ch[1]->size; return ;}void rotato(node* &now,int base){ node* k=now->ch[base^1]; now->ch[base^1]=k->ch[base]; k->ch[base]=now; sum(now); sum(k); now=k;}int cmp(node* &now,int value){ if(now->val==value) return -1; return (now->val > value ? 0 : 1);}int cmpkth(node* &now,int kth){ int s=now->ch[0]->size; if(s
num<=kth) return -1; return (kth <= s ? 0 : 1 );}node* New(int val){ node* res=new node; res->ch[0]=res->ch[1]=nil; res->size=res->num=1; res->key=rand(); res->val=val; return res;}void insert(node* &now,int val){ if(now==nil) { now=New(val); return ; } int d=cmp(now,val); if(d==-1) { now->num+=1; now->size+=1; return ; } insert(now->ch[d],val); if(now->key < now->ch[d]->key) rotato(now,d^1); sum(now); return ;}void pre(node* &now,int val,int &ans){ if(now->val
val,ans); if(now->ch[1]!=nil) pre(now->ch[1],val,ans); } if(now->val>=val&&now->ch[0]!=nil) pre(now->ch[0],val,ans);}void nxt(node* &now,int val,int &ans){ if(now->val>val) { ans=min(ans,now->val); if(now->ch[0]!=nil) nxt(now->ch[0],val,ans); } if(now->val<=val&&now->ch[1]!=nil) nxt(now->ch[1],val,ans);}void del(node* &now,int val){ if(now==nil) return ; int d=cmp(now,val); if(d==-1) { if(now->num>1) { now->size-=1; now->num-=1; return ; } node* u=now; if(now->ch[0]!=nil&&now->ch[1]!=nil) { int d2=(now->ch[0]->key > now->ch[1]->key ? 0 : 1); rotato(now,d2^1); del(now->ch[d2^1],val); } else if(now->ch[0]==nil) now=now->ch[1]; else now=now->ch[0]; u=nil; } else del(now->ch[d],val); sum(now);}int Min(node* &now){ if(now==nil) return 0x7fffffff; if(now->ch[0]==nil) return now->val; Min(now->ch[0]);}void visit(node* &now){ if(now==nil) return ; visit(now->ch[0]); cout<
val<<" "; visit(now->ch[1]);}int find(node* &now,int value){ if(now==nil) return 0x7fffffff; int d=cmp(now,value); if(d==-1) return now->ch[0]->size+1; else if(d==0) return find(now->ch[0],value); else return now->ch[0]->size+now->num+find(now->ch[1],value);}int minn(node* &now){ if(now==nil) return 0x7ffffff; if(now->ch[0]==nil) return now->val; minn(now->ch[0]);}node* root;node* root1;int beside[500010][2];void init(){ nil=new node; root=root1=nil; nil->ch[0]=nil->ch[1]=nil; nil->key=nil->num=nil->size=nil->val=0; return;}int main(){ init(); cin.sync_with_stdio(false); srand(time(NULL)); int n,m; cin>>n>>m; int a,b; int mod1=1e9,mod2=1e9; for(int i=1;i<=n;i++) { cin>>a; beside[i][0]=beside[i][1]=a; insert(root,a); if(i!=1) insert(root1,abs(beside[i-1][1]-a)); int ha=1e9; nxt(root,a,ha); mod2=min(mod2,abs(ha-a)); ha=-1e9; pre(root,a,ha); mod2=min(mod2,abs(ha-a)); } mod1=minn(root1); string h; bool falg=false;//huaji for(int i=1;i<=m;i++) { cin>>h; if(h=="INSERT") { cin>>a>>b; if(find(root,b)>0) { falg=true; mod2=0; } if(!falg) { insert(root,b); int ha=1e9; nxt(root,b,ha); mod2=min(mod2,abs(ha-b)); ha=-1e9; pre(root,b,ha); mod2=min(mod2,abs(ha-b)); } del(root1,abs(beside[a][1]-beside[a+1][0])); insert(root1,abs(beside[a][1]-b)); beside[a][1]=b; insert(root1,abs(beside[a][1]-beside[a+1][0])); mod1=minn(root1); } if(h=="MIN_GAP") cout<
<
>n>>m; int b; for(int i=1;i<=n;i++) { cin>>b; insert(root1,b); visit(root1); cout<
>b; del(root1,b); visit(root1); cout<

转载于:https://www.cnblogs.com/Lance1ot/p/9048409.html

你可能感兴趣的文章
我的友情链接
查看>>
detached entity passed to persist 错误的引起的原因和解决办法
查看>>
自动发送密码抓取远程日志 Shell脚本实现代码
查看>>
pyhon的语法缩进真叫一个蛋疼
查看>>
linux企业级应用
查看>>
禁止远程桌面到服务器复制粘贴
查看>>
CentOS7 安装MariaDB
查看>>
育贤网站开发问题总结
查看>>
我的友情链接
查看>>
邮件服务
查看>>
企业信息化建设的乱象故事
查看>>
记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案
查看>>
我的友情链接
查看>>
Linux 下的(防火墙)iptables
查看>>
我的友情链接
查看>>
Debian9.2安装Zabbix3.4.2
查看>>
docker run java官方镜像默认自动退出的问题解决办法
查看>>
C#可以做什么
查看>>
【shell】oracle安装前环境设置
查看>>
使用PowerShell管理Office 365用户密码策略
查看>>