loj持久化序列【无旋treap】

博客围绕无旋treap展开,它基于spilt和merge函数。有一道模板题增加了更新操作,思路类似主席树,只插入或删除链上的点,其他参照旧版本。还提到用结构体存节点数据便于复制信息,空间需开40倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//无旋treap真滴nb。。基于spilt和merge两个函数可以做很多事情。。
之前有一道模板题基于那道题多了版本更新操作,思路和主席树的思路类似,只新建插入或删除的那条链上的点,其他的点参照之前的版本。
然后就没有然后了。。

1.因为要复制一些节点的信息,把节点的数据用结构体存起来比较好写。
2.空间开40倍。

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5+5;
typedef long long ll;
const ll mod = 1e9+7;
int Case = 1;
int n, m;
struct Treap{
    struct node{
        int ch[2], dat;
        int val, size;
    }tr[maxn*40];
    int root[maxn];
    int tot, cnt;
    void pushup(int rt) {
        tr[rt].size = tr[tr[rt].ch[0]].size + 1 + tr[tr[rt].ch[1]].size;
    }
    int copy(int rt) {
        tot++;
        tr[tot] = tr[rt];
        return tot;
    }
    int newnode(int x) {
        tot++;
        tr[tot].size = 1;
        tr[tot].dat = rand();
        tr[tot].val = x;
        return tot;
    }
    void spilt(int rt, int k, int &x, int &y) {
        if(!rt)  x = y = 0;
        else{
            if(tr[tr[rt].ch[0]].size >= k) {
                y = copy(rt);
                spilt(tr[y].ch[0], k, x, tr[y].ch[0]);
                pushup(y);
            }
            else{
                x = copy(rt);
                spilt(tr[x].ch[1], k-tr[tr[x].ch[0]].size-1, tr[x].ch[1], y);
                pushup(x);
            }
            
        }
    }
    int merge(int A, int B) {
        if(!A || !B) return A + B;
        if(tr[A].dat < tr[B].dat) {
            int res = copy(A);
            tr[res].ch[1] = merge(tr[res].ch[1], B);
            pushup(res);
            return res;
        }
        else {
            int res = copy(B);
            tr[res].ch[0] = merge(A, tr[res].ch[0]);
            pushup(res);
            return res;
        }
    }
    int insert(int rt, int k, int x) {
        int node = newnode(x);
        int a, b;
        spilt(rt, k-1, a, b);
        // puts("!!!");
        // dfs(a);puts("");
        // dfs(b);puts("");
        // puts("!!!");
        return merge(merge(a, node), b);
    }
    int del(int rt, int k) {
        int a, b, c;
        spilt(rt, k-1, a, b);
        spilt(b, 1, b, c);
        return merge(a, c);
    }
    int query(int rt, int k) {
        if(!rt) return -1;
        if(k <= tr[tr[rt].ch[0]].size) return query(tr[rt].ch[0], k);
        else if(k == tr[tr[rt].ch[0]].size + 1) return tr[rt].val;
        else return query(tr[rt].ch[1], k-1-tr[tr[rt].ch[0]].size);
    }
    void dfs(int rt) {
        if(!rt) return;
        dfs(tr[rt].ch[0]);
        printf("%d ", tr[rt].val);
        dfs(tr[rt].ch[1]);
    }
    void add() {
        cnt++;
    }
}treap;
void solve() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) {
        int op;scanf("%d", &op);
        if(op == 1) {
            int t, k, val;
            scanf("%d%d%d", &t, &k, &val);
            treap.add();
            treap.root[treap.cnt] = treap.insert(treap.root[t], k, val);
            //treap.dfs(treap.root[treap.cnt]);      
        }
        else if(op == 2) {
            int k, t;scanf("%d%d", &t, &k);
            treap.add();
            treap.root[treap.cnt] = treap.del(treap.root[t], k);
            //
        }
        else if(op == 3) {
            int t, k;scanf("%d%d", &t, &k);
            printf("%d\n", treap.query(treap.root[t], k));
            
            //puts("");
        }
        //printf("%d\n", treap.size[treap.root[3]]);
        //treap.dfs(treap.root[treap.cnt]);
        //puts("");
    }
    return;
}
int main() {
    //g++ -std=c++11 -o2 1.cpp -o f && ./f < in.txt
    //ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt","w",stdout);
#endif
while(Case--) {
    solve();
    }
return 0;
}
JFM7VX690T型SRAM型现场可编程门阵列技术手册主要介绍的是上海复旦微电子集团股份有限公司(简称复旦微电子)生产的高性能FPGA产品JFM7VX690T。该产品属于JFM7系列,具有现场可编程特性,集成了功能强大且可以灵活配置组合的可编程资源,适用于实现多种功能,如输入输出接口、通用数字逻辑、存储器、数字信号处理和时钟管理等。JFM7VX690T型FPGA适用于复杂、高速的数字逻辑电路,广泛应用于通讯、信息处理、工业控制、数据中心、仪表测量、医疗仪器、人工智能、自动驾驶等领域。 产品特点包括: 1. 可配置逻辑资源(CLB),使用LUT6结构。 2. 包含CLB模块,可用于实现常规数字逻辑和分布式RAM。 3. 含有I/O、BlockRAM、DSP、MMCM、GTH等可编程模块。 4. 提供不同的封装规格和工作温度范围的产品,便于满足不同的使用环境。 JFM7VX690T产品系列中,有多种型号可供选择。例如: - JFM7VX690T80采用FCBGA1927封装,尺寸为45x45mm,使用锡银焊球,工作温度范围为-40°C到+100°C。 - JFM7VX690T80-AS同样采用FCBGA1927封装,但工作温度范围更广,为-55°C到+125°C,同样使用锡银焊球。 - JFM7VX690T80-N采用FCBGA1927封装和铅锡焊球,工作温度范围与JFM7VX690T80-AS相同。 - JFM7VX690T36的封装规格为FCBGA1761,尺寸为42.5x42.5mm,使用锡银焊球,工作温度范围为-40°C到+100°C。 - JFM7VX690T36-AS使用锡银焊球,工作温度范围为-55°C到+125°C。 - JFM7VX690T36-N使用铅锡焊球,工作温度范围与JFM7VX690T36-AS相同。 技术手册中还包含了一系列详细的技术参数,包括极限参数、推荐工作条件、电特性参数、ESD等级、MSL等级、重量等。在产品参数章节中,还特别强调了封装类型,包括外形图和尺寸、引出端定义等。引出端定义是指对FPGA芯片上的各个引脚的功能和接线规则进行说明,这对于FPGA的正确应用和电路设计至关重要。 应用指南章节涉及了FPGA在不同应用场景下的推荐使用方法。其中差异说明部分可能涉及产品之间的性能差异;关键性能对比可能包括功耗与速度对比、上电浪涌电流测试情况说明、GTH Channel Loss性能差异说明、GTH电源性能差异说明等。此外,手册可能还提供了其他推荐应用方案,例如不使用的BANK接法推荐、CCLK信号PCB布线推荐、JTAG级联PCB布线推荐、系统工作的复位方案推荐等,这些内容对于提高系统性能和稳定性有着重要作用。 焊接及注意事项章节则针对产品的焊接过程提供了指导,强调焊接过程中的注意事项,以确保产品在组装过程中的稳定性和可靠性。手册还明确指出,未经复旦微电子的许可,不得翻印或者复制全部或部分本资料的内容,且不承担采购方选择与使用本文描述的产品和服务的责任。 上海复旦微电子集团股份有限公司拥有相关的商标和知识产权。该公司在中国发布的技术手册,版权为上海复旦微电子集团股份有限公司所有,未经许可不得进行复制或传播。 技术手册提供了上海复旦微电子集团股份有限公司销售及服务网点的信息,方便用户在需要时能够联系到相应的服务机构,获取最新信息和必要的支持。同时,用户可以访问复旦微电子的官方网站(***以获取更多产品信息和公司动态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值