poj 3481 分类: poj 2015-0...


裸的平衡树,于是就1A了,于是这就是我以后的平衡树模板了
不要问我为什么用宏定义和结构体写出一个奇怪[极像数组并且可以用数组代替]的表达方式,
这是我最后的倔强。。。。。。

UPD:平衡树模板已换!


#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<iostream>
#include<algorithm>

#define fa(x)  mp[x].fa
#define cnt(x) mp[x].cnt
#define c(x,y) mp[x].c[y]

const int MAXN = 1000000, L = 0 ,R = 1;

struct Treenode{int c[2],fa,cnt;}mp[MAXN] = {0}, emp = {0} ;//cnt:size
int root , val[MAXN] = {0} , tot = 0;

inline void update(const int &si)
{cnt(si) = cnt(c(si,L)) + cnt(c(si,R)) + 1;}

inline int  build(const int ll,const int rr)
{
    int mid = (ll + rr)>>1 , newd;
    if(ll == rr) {update(ll); return ll;}
    if(rr>mid)c(mid,R) = newd = build(mid+1,rr) , fa(newd) = mid;
    if(ll<mid)c(mid,L) = newd = build(ll,mid-1) , fa(newd) = mid;
    update(mid);  return mid;
}

inline void rotate(const int x,int &k)
{
    int y = fa(x) , z = fa(y);
    int i = (c(y,R) == x) ,j = i^1 , fi = (c(z,R) == y);

    if(y != k) c(z,fi) = x;else  k = x;

    fa(x) = z;fa(y) = x ;fa(c(x,j))= y;
    c(y,i) = c(x,j); c(x,j) = y ;
    update(y);update(x);
}
inline void splay(const int x,int &k)
{
    while(x != k)
    {
      int y = fa(x) , z =fa(y);   
      if(y != k)
      {
        if((fa(y)==c(z,R))^(fa(x)==c(y,R)))rotate(x, k);
        else   rotate(y, k);
      }
      rotate(x,k);
    }
}
inline int find(int x)
{
    int now = root;
    while(true)
    {
        int p = cnt(c(now,L)) + 1;
        if(p == x) break;
        else if(p > x)  now = c(now,L);
        else   { x -= p;now = c(now,R);}
    }
    return now;
}
inline void del(const int x)
{
    splay(x ,root);
    if(c(root,R))
    {
        int y = find(cnt(c(x,L)) + 1 +1);
        splay(y , c(x,R));root = y;fa(y) = 0;
        c(y,L) = c(x,L);fa(c(x,L)) = y;update(y);
        mp[x] = emp;
    }
    else
    {
        root = c(root,L);fa(root) = 0;
        mp[x] = emp;
    }
    tot --;
}
inline void insert(const int x)
{
    int now = root , tag;

    if(!tot){root = x; tot ++;return;}
    while(1)
    {
        if(val[x] < val[now])
         if(c(now,L))now = c(now,L);else{tag = L;break;}
        else
         if(c(now,R))now = c(now,R);else{tag = R;break;}
    }
    c(now,tag) = x;fa(x) = now;
    cnt(x) = 1,now = x;
    while(now != root){now = fa(now);update(now);}
    splay(x,root);
    tot ++;
}
int main()
{

#ifndef ONLINE_JUDGE    
    freopen("poj3481.in","r",stdin);
    freopen("poj3481.out","w",stdout);
#endif  
    root = 0;
    while(true)
    {
        int c , a , b;
        scanf("%d",&c);
        if(c == 0)  break;
        else if(c == 1)
        {scanf("%d%d",&a,&b); val[a] = b; insert(a);}
        else
        {   
           if(!tot) {printf("0\n");continue;}
           if(c == 2)
            {printf("%d\n",(a = find(tot))); del(a);}
            else if(c == 3)
            {printf("%d\n",(a = find(1))); del(a); }
            else return -1;
        }
    }
#ifndef ONLINE_JUDGE    
    fclose(stdin);
    fclose(stdout);
#endif  
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/dashgua/p/4723099.html

深度学习+遥感:2025最新土地利用分类资源大全(数据集/论文/代码) 近年来,深度学习在遥感影像土地利用分类领域取得了突破性进展,从传统的农田、森林识别,到复杂的城市功能区划分,AI正在重新定义我们对地表覆盖的认知。无论是科研还是工程应用,高质量数据集、前沿算法和开源工具都是成功的关键。本文精心整理了2024年最值得关注的土地利用分类资源,包括:✅ 10+个权威数据集(覆盖全球、多分辨率、多光谱/雷达)✅ 15+篇顶会论文(CNN/Transformer/自监督学习等SOTA方法)✅ 6大开源工具箱(PyTorch/Keras实现,即拿即用) 阅读详情

相关推荐

控制障碍函数(Control Barrier Function,CBF) 一、定义

介绍控制障碍函数

Lyajpunov的博客 2万+

POJ 3481:双端队列 ← 数组模拟

​虽然本题来源于三个刷题网站: POJ 3481:http://poj.org/problem?id=3481 HDU 1908:http://acm.hdu.edu.cn/showproblem.php?pid=1908 AcWing 5128:https://www.acwing.com/problem/content/5128/ 但是,下文使用数组模拟的代码仅在 POJ 3481 上通过,而在 HDU 1908 及 AcWing 5128 上均超时。故可考虑使用 STL map 来实现。

hnjzsyjyj的专栏 377

不止于连接:用VS Code Remote-SSH深度开发树莓派(Ubuntu 22.04环境实战)

本文详细介绍了如何在Ubuntu 22.04环境下使用VS Code的Remote-SSH功能进行树莓派深度开发。通过SSH配置、VS Code扩展安装和远程环境优化,开发者可以在本地高效编写代码,同时在树莓派上直接运行和测试,解决性能瓶颈问题。文章还提供了高级功能如端口转发、多项目管理和远程调试的实战技巧。

didui8202的博客 352

POJ 3481 Splay

传送门:POJ 3481题解 用二分查找建树, 然后把新节点放到root下, 这样能够保证查询复杂度平摊为O(logn); 查询后, 把查找的节点删掉(修改父亲和某个孩子指针, 数组模拟), 因为新建的时候旋转, 所以这里的节点不会又两个孩子 还有一种map解法 Splay code:#include<iostream> #include<cstring> #include<cstd

退役ACMer 637

数字IC设计技能篇之如何在RTL级降低功耗?

以上就是本次降低芯片功耗的部分心得和收获,由于是在芯片设计阶段还没办法后端直接给出power的报告,前端一般使用spyglass和fsdb来进行功耗分析,后续会更新如何使用spyglass在前仿阶段进行power的分析,以及持续更新有关RTL级降低功耗的相关内容。

mzynk的博客 1202

Word | 简单可操作的快捷公式编号、右对齐和引用方法

在理工科论文的写作中,涉及到大量的公式输入,我们希望能够按照章节为公式进行编号,并且实现公式居中,编号右对齐的效果。网上有各种各样的方法来实现,操作繁琐和简单的混在一起,让没有接触过公式编号的人感觉比较混乱。笔者自己博览相关博客,亲身实践,总结出一套自认为比较简便的公式编号、对齐和引用方法,在这里分享给大家~

qq_43466146的博客 3万+

POJ 3481 Double Queue(STL)

题意:让你模拟一个队列,每次能够把一个新的单位加到队列中,或者是找到优先 级最高或最低的人并删除。 首先就应该知道我们需要一个可以自排序的数据结构,于是set乱搞。代码:// // Created by CQU_CST_WuErli // Copyright (c) 2016 CQU_CST_WuErli. All rights reserved. // #include <iostream>

只玩三国的程序猿的专栏 502

从零实现高精度手势检测:OpenCV+MediaPipe模型移植实战(2)(附c++完整代码)

上篇已经介绍了手掌检测的方法。本章将在手掌检测的基础上,完成手指关节的检测。

qq_37160641的博客 2665

poj 3481 Double Queue(平衡树,SBT)

poj 3481 Double Queue 平衡树模板题,练手

yjCola 770

Buck电源设计常见的一些问题(四)MOS管振荡抑制方法(二)

另一方面,开关振铃为远超开关频率的高频振铃,并伴随很高的 dV/dt,会带来传导和辐射的 EMI 问题,可能会使得终端产品不能通过 EMI 标准测试,更严重时甚至会干扰开关电源自身的信号电路或临近的其他功能电路的正常工作。选用二极管反向特性好的器件;该电路可等效成图 3 中 LC 谐振电路,新的 LR和 CR为 Lp1、Lp5,Lp3, Lp4, CD等所有参与振铃的寄生感容的复合值。通常 Snubber 的 Csnub取值在数 nF 以上,在振铃频率 fR(加了 snubber 后)下的阻抗很小。

小幽余生不加糖 2892

AMBA-CHI协议详解(五)

 每个事务由许多不同的packets组成,这些数据包通过互连(interconnect)传输。packets内的一组ID域段用于提供有关包的附加信息。

Crazzy_M的博客 1960

POJ3481 Double Queue (map)

使用map,并将优先级值放在first以自动排序,如果输入的代码为2,就输出最后一组元素的second并删去,输入代码为3时同理。

2403_87149971的博客 360

中国石油招标投标网 — 中标候选人爬虫技术分析

复制真实浏览器的 TLS 握手参数(密码套件顺序、TLS 扩展、ALPN 等),绕过基于 JA3/JA3S 指纹的服务端检测。所有 API 请求体使用 RSA-1024 公钥加密,响应体使用私钥解密,HTTP body 全程为密文。库使用 urllib3 的默认 TLS 握手参数,与真实浏览器差异明显,易被 JA3 指纹检测工具识别。密钥隐藏在 CSS 文件中,这是一种隐蔽分发技术,防止简单的密钥抓取。切换次数越多,等待时间越长,最大 60 秒,避免被代理 API 限流。为空,也返回包含基础信息的空行。

猫敷雪 285

POJ3481 Double Queue (平衡树)【例题精讲】

(这题目莫名让我想到了穿越火线。。。) 题意:编写一个银行应用程序,支持下列操作: 1,加入一个客户(输入:1,k,q) 其中k是客户的编号(不一定是1-n但保证小于一百万),q是客户优先级(整型数好吧)。 2,询问当前优先度最高的客户的编号(输入:2),并且将这个客户删除。 3,询问当前优先度最低的客户的编号(输入:3),并且将这个客户删除。 4,结束操作(输入0)。 ...

daxian3723的博客 356

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

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

poj 3481

<br />    题目描述:给出一些操作查找序列里的最大最小值。<br />    还是用SBT做的,其实平衡树很好用,效率也高,代码长一点全当作是锻炼代码能力吧。<br /> <br /> <br />#include"stdio.h"#include"string.h"#include"stdlib.h"constint N=50005;constint M=1000005;structNode{int k;int prio;int size;structNode*l,*r;}*root,tree[M

Yular的专栏 1813

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

poj3481 Double Queue(set模拟or splay)

题目链接 题目意思明确。可以用两个set来模拟,一个大的优先,一个小的优先,同时删除、同时加入。 struct item1 { int k, p; item1() {} item1(int k, int p) : k(k), p(p) {} bool operator < (const item1& rhs) const { return p <

KIJamesQi的博客 581

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

[Splay模板题]POJ3481 num巧用

three kind of operation: op1: insert client whose id is x and priority is p to queue op2: get the client with **highest** priority and drop him from the queue op2: get the client with **lowest**...

Mr_Alice的博客 360

poj3481Double Queue之set解法

Double Queue Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15781 Accepted: 6993 DescriptionThe new founded Balkan Investment Group Bank (BIG-Bank) opened a new office in Buc

天行健,君子以自强不息 512

POJ3481 Double Queue (Splay)

题意:给出三种操作,1表示加入一个值和一个优先级,2表示找到最大优先级的数的值并输出,然后去掉这个数,3表示找到最小优先级的值并输出然后去掉。。。 Splay的模板,写的时候除了一点问题,这里涉及到了插入和删除操作,插入按平衡二叉树的操作就差不多了,删除的时候先把要删除的移动到根节点,然后找第一个比根节点优先级小的数(如果没有直接删掉这个节点,把根节点右移下就好),然后把那个数旋转到根节点的左节

eeeaaaaa的专栏 541

POJ-3481 Double Queue,Treap树和set花式水过!

Double Queue 本打算学二叉树,单纯的二叉树感觉也就那几种遍历了, 无意中看到了这个题,然后就花了两天时间又去学了学Treap树,真的不好理解,真应该从基础开始的,但我比较倔强,看到这题一定要先做了再说。上午和某公众号交流了一下,初学,不明白为什么要借助随机优先值来修正,而这题本身...

weixin_30339969的博客 135

poj3481(通过stl中的set,以及pair和make_pair简单通过)

/*其实此题就是一个对应关系的题,如果用优先队列需要300多行的代码而且难以理解*/ #include #include #include #include #include using namespace std; int main() { set >s; set >::iterator it;//迭代器有点像for循环是个指针操作用于遍历容器中的元素等

small__snail__5的博客 448

poj3481-Double Queue

根据优先值的大小,输出它所对应的节点,在建树的过程中,再加一个kk变量,找到优先值p的位置,输出kk即可 /************************************************************************* > File Name: 3481.cpp > Author: Ac_Toy > Mail: ycsgldy@163.

AcToy 876

POJ 3481 Double Queue Treap

题目链接: http://poj.org/problem?id=3481 对于每个节点有val和key 操作3种: 1.加入节点val和key 2.查找key最大的节点,输出val,并删除节点 3.查找key最小的节点,输出val,并删除节点Treap模板题 按key值构造Treap,最大点递归查找左孩子,最小点递归查找右孩子代码:#include <algorithm> #inclu

SolarDomo的博客 320

poj3481——treap

题意:动态求一个集合的最大值和最小值。 treap的模板题。 #include #include #include #include #include using namespace std; struct node { node * ch[2]; int r, v, q; bool operator < (const node & rhs) const {

cool_Fires的专栏 773

poj 3481 Double Queue(SBT解法)

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

志当存高远 1523

【POJ No. 3481】双重队列 Double Queue

【POJ No. 3481】双重队列 Double Queue

代码改变世界 885
上一篇: poj 2528 分类: poj 2015-0...
下一篇: poj 2985 分类: poj 2015-0...
aa288288
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值