线段树基操
时间:2019-10-08
本文章向大家介绍线段树基操,主要包括线段树基操使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
P1816 忠诚
st表竟然写挂了,线段树一遍过(就当练码力)
P1198 [JSOI2008]最大数
- 1.动态在末尾插入一个数
2.输出末尾的L个数的最大值
线段树维护!P3870 [TJOI2009]开关
P2574 XOR的艺术
P2846 [USACO08NOV]光开关Light Switching
三倍经验题!!!
- 对一段01区间取^1,则若要修改这个o,这段区间的1的个数=区间长度-这段区间的1的个数(t[o].yihuo)
对于一个o,是否修改这个区间,可以对t[o].tag^1,
若原来有标记,现在又要反转这个区间,则t[o].tag置为零。
若原来无标记,就打上标记
P3373 【模板】线段树 2
复习一下,今下午考了一道+和/(向下取整),特此复习
P2023 [AHOI2009]维护序列
上题的双倍经验
P4588 [TJOI2018]数学计算
第一反应并不觉得这是个线段树,题意很好模拟,交了发模拟WA的心痛,模拟的算法没有问题,貌似是……mod出锅了,题目并没有说mod是一个质数啊喂喂喂i除法不满足取模意义下的分配律啊喂,那么我们来想一下除法的逆运算:乘法。
首先要知道一个关于取模的公式:
(a*b)%P=(a%P*b%P)%P
然后观察题意,始终是对于一个曾经乘过的数进行除操作,
如果之前乘上了某一个数,那么之后无论经过多少次操作,再除以之前的这个数,那么就可以视作对其没有操作,
那么不难想到可以以操作时间为线段建立线段树,记录的就是区间乘积模mod,那么就可以用上面的式子维护,
对于操作1:
把当前操作的序号位置变成m,
对于操作2:
就是将pos改成1,每次询问的t[1].mul就是整个序列的操作结果.
P2161 [SHOI2009]会场预约 : 披着treap外衣的slt set好题
/*
translation:
题意就是叫你维护一条时间轴,支持2种操作:
1)删除当前时间轴上所有与新区间有交的区间输出删除个数,然后插入新区间。
2)查询当前时间轴上的区间个数。
reference:
solution:
首先考虑A操作,由于STL的set有相同元素只保留一个的特性,因此我们不难想到令有冲突的预约相等,
这样我们就可以很方便的用.find()这个函数来完成A操作了。
怎么令它们相等呢?
struct Plan{
int l,r;
bool operator <(const Plan &rhs)const{
return r<rhs.l;
}
};
这样对于两个Plan类型的结构体a,b来说,
a<b就代表a完全在b的左边,a>b就代表a完全在b的右边,a==b就代表a与b有冲突(有重叠部分)
对于B操作,直接输出set里元素的个数就好了
trigger:
note:
*
date:
2019.09.10
*/
struct node{
int l,r;
bool operator < (const node &rhs)const{
return r<rhs.l;
}
};
int n;
set<node>s;
int main(){
freopen("yuyue.txt","r",stdin);
rd(n);
while(n--){
char op;
scanf(" %c",&op);
if(op=='A'){
int l,r;rd(l),rd(r);
int cnt=0;
node tmp=(node){l,r};
set<node>::iterator it=s.find(tmp);
while(it!=s.end()){
++cnt;
s.erase(it);
it=s.find(tmp);
}
s.insert((node){l,r});
printf("%d\n",cnt);
}
else printf("%d\n",s.size());
}
return 0;
}
原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11634686.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 功耗(3)---高通功耗问题分析方法
- 搞定Java快速排序
- Android 功耗(4)---MTK平台待机功耗分析流程
- 使用iframe实现在pc端预览移动端页面的效果
- html+css实现彩色渐变滑动条
- 项目实战 01:将唐诗三百首写入 Elasticsearch 会发生什么?
- 装饰器和代理模式的区别,从一碗小米粥谈起
- EasyNVR部署在centos虚拟机上出现无法访问情况,该如何排查?
- RTSP协议网页无插件直播平台EasyNVR视频广场无法搜索纯数字关键词的通道,该如何解决的?
- RTSP协议网页无插件直播平台EasyNVR通道管理搜索纯数字关键词,返回结果为空如何解决?
- Mysql如何选择唯一索引和普通索引
- Python自学成才之路 多线程开发
- Mysql为什么会抖一下呢
- Python自学成才之路 线程间协作 lock,condition,event的使用
- Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)