poj 3481 Double Queue

合金理论自动化工具包(Alloy-Theoretic Automated Toolkit:ATAT)的安装 合金理论自动化工具包(ATAT)是一个通用名称,指的是合金理论工具的集合,它包含了不同的代码工具,具体如下: 1)根据第一性原理(映射和映射)构造集群扩展的代码。簇展开是一种非常紧凑和有效的表达式,给出取代合金的能量作为其构型的函数(即原子的类型位于晶格的哪个位置)。 2)为了计算合金的热力学性质,从聚类展开开始,对晶格模型进行蒙特卡洛模拟(emc2和memc2)的代码。 3)执行晶格动力学计算的代码(fitfc, fitsvsl, svsl) 4)使用简单的物理或半经验模型计算电子和磁自由能贡献 阅读详情

        有三种操作,添加客户,输出优先级最高的客户并删掉,输出优先级最低的客户并删掉。作为学习splay的题目,敲出了人生中的第一颗splay。居然和时限一样AC。

        小发现:因为写的是指针版的splay,后来加了一句free,把删除的节点free掉,运行快了不少。

#include <iostream>    
#include <stdio.h>    
#include <string>    
#include <map>    
#include <vector>    
#include <stack>    
#include <queue>    
#include <string.h>    
#include <algorithm>    
#include <math.h>    
    
using namespace std;    

struct node{
	node* pleft;
	node* pright;
	int pri;
	int id;
};

node* splay(node* pNode,int pri){
	if(pNode==NULL)return pNode;
	
	node* root=pNode;
	while(1){
		node* l=root->pleft;
		node* r=root->pright;
		if(pri<root->pri){
			if(l==NULL)break;
			if(pri<l->pri){
				root->pleft=l->pright;
				l->pright=root;
				root=l;
			}else{
				break;
			}
		}else{
			if(r==NULL)break;
			if(pri>r->pri){
				root->pright=r->pleft;
				r->pleft=root;
				root=r;
			}else{
				break;
			}
		}
	}
	return root;
}

node* insert(node* pNode,int id,int pri){
	//建立新节点 
	node* newNode=new node();
	newNode->id=id;
	newNode->pri=pri;
	//
	if(pNode!=NULL){
		pNode=splay(pNode,pri);
		if(pri<pNode->pri){
			newNode->pleft=pNode->pleft;
			newNode->pright=pNode;
			pNode->pleft=NULL;
		}else{
			newNode->pleft=pNode;
			newNode->pright=pNode->pright;
			pNode->pright=NULL;
		}
	}
	return newNode;
}

node* root;

int delMax(){
	if(root==NULL)return 0;
	node* t=root;
	node* del;
	while(t->pright){
		del=t;
		t=t->pright;
	}
	if(t==root){
		root=root->pleft;
	}else{
		del->pright=NULL;
	}
	int re=t->id;
	free(t);
	return re;
}

int delMin(){
	if(root==NULL)return 0;
	node* t=root;
	node* del;
	while(t->pleft){
		del=t;
		t=t->pleft;
	}
	if(t==root){
		root=root->pright;
	}else{
		del->pleft=NULL;
	}
	int re=t->id;
	free(t);
	return re;
}


int main(){
	int op;
	
	while(~scanf("%d",&op)){
		if(!op)break;
		if(op==1){
			int k,p;
			scanf("%d%d",&k,&p);
			root=insert(root,k,p);
		}else if(op==2){	//最高 
			int ans=delMax();
			printf("%d\n",ans);
		}else{				//最低 
			int ans=delMin();
			printf("%d\n",ans);
		}
	}
	return 0;
}


        为了学习Treap,又用Treap敲了一遍。。

#include <iostream>    
#include <stdio.h>    
#include <string>    
#include <map>    
#include <vector>    
#include <stack>    
#include <queue>    
#include <string.h>    
#include <algorithm>    
#include <math.h>    
    
using namespace std;    


struct treap{
	treap* pleft;
	treap* pright;
	int pri,id;
	int fix;		//修正值,小顶堆 
};


void LRotate(treap *&node){
	treap* r=node->pright;
	node->pright=r->pleft;
	r->pleft=node;
	node=r;
}

void RRotate(treap *&node){
	treap* l=node->pleft;
	node->pleft=l->pright;
	l->pright=node;
	node=l;
}

void insert(treap *&node,int id,int pri){
	if(node==NULL){
		treap* newNode=new treap();
		node=newNode;
		node->id=id;
		node->pri=pri;
		node->fix=rand();
	}else if(pri<node->pri){
		insert(node->pleft,id,pri);
		if(node->pleft->fix<node->fix){
			RRotate(node);
		}
	}else{
		insert(node->pright,id,pri);
		if(node->pright->fix<node->fix){
			LRotate(node);
		}
	}
	
}

int Minpri,Maxpri;

int findMin(treap* node){
	if(node==NULL)return 0;
	if(node->pleft)return findMin(node->pleft);
	Minpri=node->pri;
	return node->id;
}

int findMax(treap* node){
	if(node==NULL)return 0;
	if(node->pright)return findMax(node->pright);
	Maxpri=node->pri;
	return node->id;
}

void Delete(treap *&node,int val){
	if(node->pri==val){
		if(!node->pleft||!node->pright){
			treap* t=node;
			if(!node->pleft){
				node=node->pright;
			}else{
				node=node->pleft;
			}
			delete t;
		}else{	//两边都有 
			if(node->pleft->pri<node->pright->pri){
				RRotate(node);
				Delete(node->pright,val);
			}else{
				LRotate(node);
				Delete(node->pleft,val);
			}
		}
		
	}else if(val<node->pri){
		Delete(node->pleft,val);
	}else{
		Delete(node->pright,val);
	}
}


int main(){
	int op;
	treap* root=NULL;
    while(~scanf("%d",&op)){  
        if(!op)break;  
        if(op==1){  
            int k,p;  
            scanf("%d%d",&k,&p);  
            insert(root,k,p);  
        }else if(op==2){    //最高   
			int ans= findMax(root);
			printf("%d\n",ans);
			if(ans){
				Delete(root,Maxpri);
			}
        }else{              //最低   
        	int ans= findMin(root);
			printf("%d\n",ans);
			if(ans){
				Delete(root,Minpri);
			}
        }  
    }
	return 0;
}



微信小程序消息推送全攻略:从模板消息到订阅消息的实战避坑指南 本文深入解析微信小程序消息推送机制,对比模板消息、订阅消息与客服消息的核心差异与适用场景。重点提供订阅消息从用户授权设计、前端代码实现到后端稳定发送的完整实战指南,并分享提升消息点击率的文案与运营技巧,帮助开发者构建高效、用户友好的消息推送体系。 阅读详情

相关推荐

Microchip Studio 7.0 从下载到项目调试:AVR开发者的完整入门指南(附常见问题解决)

本文为AVR开发者提供了Microchip Studio 7.0从下载安装到项目调试的完整入门指南。详细介绍了如何获取安装包、创建第一个AVR工程项目,并配置编译与调试环境。同时,文章重点解决了开发过程中常见的编译错误和仿真问题,帮助开发者快速上手并高效使用这一官方集成开发环境。

joy55的博客 333

poj 1293 Duty Free Shop

题目链接:http://poj.org/problem?id=1293 题目大意:01背包,水题。 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; #include&lt;string&gt; #include&lt;queue&gt; #include&lt;algorithm&gt; #in...

java开发指南博客 【转载】 153

cutlass2.x源码解读之PitchLinearStripminedThreadMap

TensorCoord:使用layout::PitchLinearCoord作为张量坐标。Shape:使用模板参数Shape_作为tile的形状,kThreads:线程总数,定义为模板参数Threads。kElementsPerAccess:每次访问的元素数,定义为模板参数ElementsPerAccess。ThreadAccessShape:线程访问的形状,使用layout::PitchLinearShape定义。内部实现细节:ShapeVec。

jiangjkd的专栏 789

Duty Free Shop - POJ 1293 dp

Duty Free Shop Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1132   Accepted: 444   Special Judge Description Pedro travelled to Europe to take part in

提比的强行AC 757

基于单片机电能质量检测仪设计

*单片机设计介绍,基于单片机电能质量检测仪设计。

2201_75940997的博客 1205

如何在n8n中高效调用playwright-mcp实现浏览器自动化(附避坑指南)

本文详细介绍了在n8n中高效集成playwright-mcp实现浏览器自动化的全流程指南,包括环境准备、工作流设计与优化、高级技巧与性能调优以及调试与问题排查。通过克服实际部署中的各种挑战,帮助用户打造稳定高效的自动化解决方案,特别适合需要浏览器自动化的工作流场景。

weixin_30379531的博客 387

贪心——POJ整理

目录 1.字典序最小问题POJ3617 2.硬币问题 3.最少标记点POJ3069 4.修复栅栏POJ3253 贪心法就是遵循某种规则,不断贪心地选取当前最优化策略的算法设计方法。 1.字典序最小问题POJ3617 //贪心 字典序比较题 /*Best Cow Line Time Limit: 1000MS Memory Limit: 65536K Total Su...

沉迷单车的追风少年 713

超十万字解读Spring AI实战:开篇

大模型技术正以惊人的速度改变世界,2025年的人工智能已不再是科幻,而是现实。大模型如ChatGPT等,正在重塑各行各业,降低技术门槛,使专业能力普及化。SpringAI的出现为Java开发者提供了桥梁,使其能在企业级系统中稳定运行AI,同时保持工程化思维。尽管SpringAI在生态、学习成本和性能上存在不足,但其企业级基因和国产化适配能力使其成为Java开发者的重要工具。本系列文章旨在介绍SpringAI的功能与特性,鼓励更多Java开发者参与AI实践,共同探索AI时代的无限可能。

liaokailin的专栏 1577

POJ 超详细分类

POJ各题算法 1000    A+B Problem           送分题    49%    2005-5-7 1001    Exponentiation        高精度    85%    2005-5-7 1002    487-3279              n/a    90%    2005-5-7 1003    Hangover         

fyfcauc的专栏 5203

基于生存结局(生存分析/COX回归)的中介效应分析

① 建立观察变量OVB和中介变量MVB的回归模型(注意:这里根据mediation包的介绍,需要构建的是probit模型,而不是logist回归模型,网上有很多的代码用的logistic回归,结果自己跑的时候发现报错,我在这里陷了很久;为了方便演示,我们生成了一个协变量(Age)、一个连续型观察变量(liaOVC)、一个二分类观察变量(OVB)、一个连续型中介变量(MVC)、一个二分类中介变量(MVB)以及最后的结局变量(生存时间[time],生存结局[stats])。

m0_61863309的博客 1万+

不会路由器叠加多条宽带?看这个就够了,能让你的局域网速度更快!

通常我们在企业网络或实际项目中,随着用户的增加,一条或者几条带宽不能满足正常使用,便可以对带宽进行叠加,便于网络带度更快;通常家里有可能有两条带宽的,联通或移动的,可能都是充话费送的,但网速都不怎么样,不用可惜,用之委屈,那怎么办呢?如在迅雷上开启下载,多个资源同时下载,此时总带宽可以达到120M,也就是WAN口带宽可以叠加。多wan口路由器, 一般是有2个wan口,分别为wan1与wan2。当然也有更多的wan口的。[1] 对整个局域网来说,出口带宽数量多了,相当于总带宽上升,这样是可以起到叠加效果。

qq_43416206的博客 1112

POJ介绍

本文旨在介绍ACM编程网站POJ(北京大学程序在线评测系统)

the Blog of 等不到天亮丶等时光 6486

博图SCL基础知识-寻址调用及新建SCL

和LAD/FBD不同,LAD/FBD在程序编辑器是一段一段的,编辑器可以插入新的网络段,每一个网络段可以有各自的注释。一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。如图3所示,当FB的参数全部显示,在背景数据块右键可以激活"仅显示分配的参数";如图2所示,显示了一些FB调用的例子。

电工 2029

POJ 3481 Double Queue(Treap)

POJ 3481 Double Queue(Treap) http://poj.org/problem?id=3481 题意:每个顾客有个编号和优先级,银行每次可以添加顾客的要求进队列,且保证队列中当前任意顾客的编号和优先级都不同.银行可以执行先服务最大优先级的顾客或者先服务最小优先级的顾客操作.对于每个服务,输出顾客的编号. 分析:直接构建Treap,插入节点的v值(顾客优先级)和节点的r

code 3105

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

POJ 3481 Double Queue(无旋treap/Splay)

题目传送门 解题思路 三种操作,插入一个数,取最大值并删除,取最小值并删除。 应该有挺多方法可以做的。 提供无旋treap和Splay这两种平衡树的数组的做法。 代码 无旋treap版本 #include<cstdio> #include<algorithm> using namespace std; #define ll long long #defi...

shadiao.的博客 370

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ - 3481 Double Queue

STL,set的使用

The Blog Of Uncle_Sugar 389

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

POJ 3481 Double Queue

题目链接:http://poj.org/problem?id=3481 题目大意: 给你0-3四个指令: 0 退出 1 添加优先级为P 的 K值,进入队列 2 最高优先级出队 3 最低优先级出队 思路: 利用map数据对key默认升序排列。 AC代码如下: #include<map> #include<iostream> using namespace std; int...

Michael是个半路程序员 1015

poj3481 Double Queue

平衡树模板题

AaronPolaris 2748

POJ 3481 Double Queue

POJ 3481 Double Queue(中文版) 北大2017大数据研究中心夏令营上机考试 G题

coding_sun的博客 1174

POJ 3481 Double Queue【SBT】

http://poj.org/problem?id=3481 该SBT模板只实现了一些简单的操作,我会不断完善其它功能。 #include #include #include #include #include using namespace std; const int maxn = 100010; struct Node { int key, val;

~飞呀,飞~ 1148

POJ 3481 Double Queue [splay]

POJ 3481 [splay]

ACTerminate的博客 535

poj 3481 Double Queue(SBT解法)

Double Queue Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5004   Accepted: 2336 Description

志当存高远 1523

POJ 3481 Double Queue Treap练习题

http://poj.org/problem?id=3481 题意很简单,就是给你很多用户的信息,叫你找出某一时刻的最大值,或最小值的id并将他从队列中删除。 这道题做法有很多很多,set都可以过去,我就把这道题当作Treap的练习题; 下面来一个简单的模板。 ///#include <bits/stdc++.h> #include<stdio.h> #inclu...

KXL5180的博客 279

poj3481 Double Queue splay

题意:有3中草

AC_kereo的专栏 826

Double Queue 【POJ - 3481】【SET】

题目链接 知道这道题可以用splay tree去做,但是先想到的肯定会是set的解法,然后再去考虑splay的做法,那么就先放上set的做法了。 #include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> ...

既然弱小,就只顾变强就是了 319

POJ3481 Double Queue

1 #include<iostream> 2 #include<cstdio> 3 #include<set> 4 #include<utility> 5 using namespace std; 6 int flag=1; 7 typedef pair<int,int> p; 8 typede...

denge2160的博客 190
上一篇: poj 2418 Hardwood Species
下一篇: 2阶段算法学习 。。
squee_spoon
博客等级 码龄14年 61粉丝 455原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值