首页 > 其他分享 >线段树选记

线段树选记

时间:2023-05-16 17:11:09浏览次数:35  
标签:输出 线段 pos 数组 条件 操作 树选记

1. [TJOI2018]数学计算

题目描述

小豆现在有一个数 \(x\),初始值为 \(1\)。小豆有 \(Q\) 次操作,操作有两种类型:

1 m:将 \(x\) 变为 \(x \times m\),并输出 \(x \bmod M\)

2 pos:将 \(x\) 变为 \(x\) 除以第 \(pos\) 次操作所乘的数(保证第 \(pos\) 次操作一定为类型 1,对于每一个类型 1 的操作至多会被除一次),并输出 \(x \bmod M\)。

Solution:

显然直接拿一个变量暴力乘会有问题。

我们可以考虑把操作序列当成一个区间来处理,使用线段树维护区间乘。

2.[USACO08JAN]Haybale Guessing G

题目描述

给一个长度为 \(n\) 的数组 \(q\) 个条件,数组中的数字互不相同,每个条件格式形如 \(l_i,r_i,x_i\) 表示这个数组的区间 \([l_i,r_i]\) 内的最小值为 \(x_i\),输出最早与前面的条件有矛盾的条件的编号,如果所有条件都不发生矛盾,输出 \(0\)。

Solution:

模拟一下可以发现,矛盾的情况有以下两种:

标签:输出,线段,pos,数组,条件,操作,树选记
From: https://www.cnblogs.com/cxqghzj/p/17406223.html

相关文章

  • hdu:LCIS(线段树+区间合并)
    ProblemDescriptionGivennintegers.Youhavetwooperations:UAB:replacetheAthnumberbyB.(indexcountingfrom0)QAB:outputthelengthofthelongestconsecutiveincreasingsubsequence(LCIS)in[a,b].InputTinthefirstline,indicatingt......
  • 线段树合并 学习笔记
    算法两棵动态开点线段树,直接把一棵线段树上的信息合并到另一棵树上。递归合并:如果某个节点两棵都有,合并,然后递归下去。否则直接返回节点。复杂度证明记权值线段树值域范围为\(m\),\(n\)次插入操作。因为动态开点,一次插入会新增\(\log_2m\)个节点,总节点数\(n\ti......
  • 线段树
    线段树--解决区间问题的数据结构,相比于树状数组,更具有普适性;完全二叉树的性质:根节下标为1,,节点为i的节点,左子节点为2*i,右子节点为2*i+1;代表nums中单个元素的节点tree[x]应当在树的最底层,即叶子节点;更大的区间从叶子节点开始向上构成;代表区间【L,R】的节点tree【i】,左子节点tre......
  • 「学习笔记」可持久化线段树
    可持久化数据结构(Persistentdatastructure)总是可以保留每一个历史版本,并且支持操作的不可变特性(immutable)。主席树全称是可持久化权值线段树,给定\(n\)个整数构成的序列\(a\),将对于指定的闭区间\(\left[l,r\right]\)查询其区间内的第\(k\)小值。可持久化线段......
  • Chemistry Experiment Codeforces Round 247 (Div. 2) 线段树动态开点,二分
    第一次写的时候还不会线段树的动态开点,写了一个是线段树但是是\(O(N^2)\)的写法,现在用动态开点武装了自己,会了正解\(O(qlogn^2)\)。首先建立一个权值线段树,但这里的权值很大,通过动态开点去建树来节省空间,对于两种操作:操作1,常见的动态开点的单点修改操作2,二分答案,然后在线段树......
  • 吉老师线段树学习笔记(内含吉老师ppt)
    Segmenttreebeats吉老师线段树SegmenttreeBeats!.pdf_免费高速下载|百度网盘-分享无限制(baidu.com)为广大oier们提供学习ppt(笑)历史最大值未完工作用用于维护区间最值和区间历史最值的线段树区间最值引入问题给定一个长度为n的数列A,有m次操作:1.将区间\([l,r]\)里......
  • 线段树合并/分裂
    你说的对,但是你理应会动态开点线段树是什么东西。合并很简单,两棵线段树一块搜,然后逐个节点合并。分裂的话可以按照FHQTreap的方法。假如我们将前\(k\)小和后边分开成\(x,y\),首先看左子树,如果比\(k\)大那右子树给\(y\),递归左子树,反之左子树给\(x\),递归右子树。真没啥......
  • 区间不同数的个数 二维数点 扫描线 可持久化线段树
    二维数点,对于询问的\([l,r]\)区间我们只需要统计有多少个数上一次出现的位置\(pos\)满足\(pos\leql\),即可。template<classT>structBIT{Tc[N];intsize;voidresize(ints){size=s;}Tquery(intx){//1...xassert(x<=size);......
  • 权值线段树模板
    【模板】普通平衡树//AConemoretimes#include<bits/stdc++.h>usingnamespacestd;#definefifirst#definesesecond#definepbpush_back#defineendl'\n'#defineall(x)(x).begin(),(x).end()typedefpair<int,int>pii;constint......
  • 线段树
     1.基础算法1.1快读快写template<typenameT>inlinevoidread(T&t){​ intf=0,c=getchar();t=0;​ while(!isdigit(c))f|=c=='-',c=getchar();​ while(isdigit(c))t=t*10+c-48,c=getchar();​ if(f)t=-t;​}​​templ......