首页 > 其他分享 >P3919 【模板】可持久化线段树 1(可持久化数组)

P3919 【模板】可持久化线段树 1(可持久化数组)

时间:2022-10-07 19:00:35浏览次数:44  
标签:cnt 持久 val int mid build 模板 P3919

还是用主席树来做(因为提到不同的版本),这时候的主席树不是以权值为下标的,就是普通的线段树,维护范围1~n,i存的是a[ ]中的数。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1e6 + 10, M = N * 30;
 4 struct node {
 5     int ls, rs, val;
 6 }t[M];
 7 int n, m, a[N], rt[N], cnt;
 8 void build(int &i, int l, int r) {
 9     i = ++ cnt;
10     if (l == r) {t[i].val = a[l]; return ;}
11     int mid = (l + r) >> 1;
12     build(t[i].ls, l, mid), build(t[i].rs, mid + 1, r);
13 }
14 void ins(int &i, int j, int l, int r, int x, int v) {
15     i = ++ cnt;
16     t[i] = t[j];//复制
17     if (l == r) {t[i].val = v; return ;}
18     int mid = (l + r) >> 1;
19     if (x <= mid) ins(t[i].ls, t[j].ls, l, mid, x, v);
20     else ins(t[i].rs, t[j].rs, mid + 1, r, x, v); 
21 }
22 int query(int i, int l, int r, int x) {
23     if (l == r) return t[i].val;
24     int mid = (l + r) >> 1;
25     if (x <= mid) return query(t[i].ls, l, mid, x);
26     else return query(t[i].rs, mid + 1, r, x);
27 }
28 int main() {
29     scanf("%d %d", &n, &m);
30     for (int i = 1; i <= n; i ++) scanf("%d", &a[i]);
31     build(rt[0], 1, n);
32     for (int i = 1; i <= m; i ++) {
33         int pre, opt, x, v;
34         scanf("%d %d %d", &pre, &opt, &x);
35         if (opt == 1) {scanf("%d", &v); ins(rt[i], rt[pre], 1, n, x, v);}
36         if (opt == 2) {printf("%d\n", query(rt[pre], 1, n, x)); rt[i] = rt[pre];/*复制相同版本*/}
37     }
38     return 0;
39 }

 

标签:cnt,持久,val,int,mid,build,模板,P3919
From: https://www.cnblogs.com/YHxo/p/16760411.html

相关文章

  • 看到一段代码,留个脚印_2(封装或者说是模板)
    2022年6月的时候玩wow3.35版本的时候,目标的目标以及目标的目标的目标是这样的,突发奇想,能不能把目标的目标以及目标的目标的目标头像翻转,就是头像在右,血条在左,和目标框体一......
  • C++模板类-数组
    /*Container.h所有容器的基类/*MemoryObject内存申请基类我使用TBB申请内存*/template<typenameT> classContainer:publicMemoryObject { protected: T*C......
  • C++模板基础知识
    源码编译环境:win10x86反汇编软件:IDAPro(胖大妈)第一次接触到模板是在C#的泛型编程,对其表面的理解是可以对一些约束范围内参数类型的方法进行重用,可以少写一些方法。在后......
  • 【模板】筛法
    \(prime\)constintN=1e7+10;intprime[N];boolnotprime[N];intminprime[N];voidprime_sieve(constintmaxn){ registerinti,multi_helper; registerin......
  • 微信小程序排行榜页面模板
    1需求在开发一款背单词的微信小程序时,为了加强用户的体验感,刺激用户积极学习,小程序中需要有排行榜的模块。通过打开天数来排名,让用户有攀比学习的心里。具体的页面截图如......
  • 模板基类与正确的派生类函数调用--Effective C++ Item 43
    问题描述假设我们有这样一个业务场景,我们管理着许多公司,每个公司都有一个自己的许多日志信息需要处理,于是为了方便,我们写了一个模板类用来处理这些公司的信息,并且将这些公......
  • KAL1 LINUX 官方文档之usb live版本 --- 将持久性添加到 Kali Linux Live USB 驱动器
    将持久性添加到KaliLinuxLiveUSB驱动器KaliLinux“Live”在默认启动菜单中有两个选项可以启用持久性——在“KaliLive”USB驱动器上保存数据——在“KaliLive”......
  • KAL1 LINUX 官方文档之usb live版本 --- 将加密持久性添加到 Kali Linux Live USB 驱
    将加密持久性添加到KaliLinuxLiveUSB驱动器在本次研讨会中,我们将研究从USB设备启动KaliLinux时可用的各种功能。我们将探索诸如持久性、创建LUKS加密持久性......
  • 设计模式系列1 - 模板模式&策略模式
    分别讲述模板模式和策略模式的使用姿势,以及两者的区别,基于java。往期精选(欢迎转发~~)Java全套学习资料(14W字),耗时半年整理消息队列:从选型到原理,一文带你全部掌握肝了......
  • 我的CMakeLists.txt模板
    我的CMakeLists.txt模板,适用于windowsSDK风格的程序,不考虑测试和安装问题.rc资源文件部分,适用windows项目。#####################################################......