首页 > 其他分享 >知识汇总2

知识汇总2

时间:2024-02-19 17:23:14浏览次数:20  
标签:lid int sum 知识 汇总 mid rid id

树状数组

——高效求前缀和
(直接放板子了。。)

下标

点击查看代码
int lowbit(int x){
	return x&(-x);
} 

单点修改

点击查看代码
void add(int i,int k){
	while(i<=n){
		c[i]^=k;
		i+=lowbit(i);
	}
}

求和

点击查看代码
int getsum(int l){
	int res1=0;
	while(l>0){
		res1^=c[l];
		l-=lowbit(l);
	}
    return res1;
}

线段树

比树状数组牛B的东西(是个二叉树)
记得预处理。。。

点击查看代码
int lid(int id){
    return id<<1;
}
int rid(int id){
    return id<<1|1;
}

建树

点击查看代码
void build(int id,int l,int r)
{
    m[id].lid=l;
    m[id].rid=r;
    if(l==r)
    {
        m[id].sum=a[l];
        return;
    }
    int mid=(l+r)>>1;
    build(lid(id),l,mid);
    build(rid(id),mid+1,r);
    m[id].sum=m[lid(id)].sum+m[rid(id)].sum;
}

下放标记

点击查看代码
void pushdown(int id)
{
    if(m[id].lazy&&m[id].lid!=m[id].rid)
    {
        m[lid(id)].lazy+=m[id].lazy;
        m[rid(id)].lazy+=m[id].lazy;
        m[lid(id)].sum+=m[id].lazy*(m[lid(id)].rid-m[lid(id)].lid+1);
        m[rid(id)].sum+=m[id].lazy*(m[rid(id)].rid-m[rid(id)].lid+1);
        m[id].lazy=0;
    }
}

单点修改

点击查看代码
void modify(int id,int x,int val)
{
    if(m[id].lid==m[id].rid)
    {
        m[id].sum+=val;
        return;
    }
    int mid=(m[id].lid+m[id].rid)>>1;
    modify(x<=mid?lid(id):rid(id),x,val);
    m[id].sum=m[lid(id)].sum+m[rid(id)].sum;
}

区间修改

点击查看代码
void add(int id,int l,int r,int s,int tt,int val)
{
    if(s>r||tt<l) return;
    if(s<=l&&tt>=r)
    {
        m[id].sum+=val*(r-l+1);
        m[id].lazy+=val;
        return;
    }
    int mid=(l+r)>>1;
    //pushdown(id);
    add(lid(id),l,mid,s,tt,val);
    add(rid(id),mid+1,r,s,tt,val);
    m[id].sum=m[lid(id)].sum+m[rid(id)].sum;
}

区间查询

点击查看代码
int find(int id,int l,int r,int s,int tt)
{
    if(s>r||tt<l) return 0;
    if(s<=l&&tt>=r) return m[id].sum;
    int mid=(l+r)>>1;
    //pushdown(id);
    return find(lid(id),l,mid,s,tt)+find(rid(id),mid+1,r,s,tt);
}

单调队列

最大值

点击查看代码
void getmax()
{
	int i,head=1,tail=0;
	for(i=1;i<m;i++)
	{
		while(head<=tail&&v[tail].x<=a[i]) tail--;\
		v[++tail].x=a[i],v[tail].y=i;
	}
	for(;i<=n;i++)
	{
		while(head<=tail&&v[tail].x<=a[i]) tail--;
		v[++tail].x=a[i],v[tail].y=i;
		while(v[head].y<i-m+1) head++;
		mx[i-m+1]=v[head].x;
	}
}

最小值

点击查看代码
void getmin()
{
	int i,head=1,tail=0;
	for(i=1;i<m;i++)
	{
		while(head<=tail&&v[tail].x>=a[i]) tail--;
		v[++tail].x=a[i],v[tail].y=i;
	}
	for(;i<=n;i++)
	{
		while(head<=tail&&v[tail].x>=a[i])tail--;
		v[++tail].x=a[i],v[tail].y=i;
		while(v[head].y<i+1-m) head++;
		mn[i-m+1]=v[head].x;
	}
}
~(单调栈就不放了,感觉没啥板子)~

标签:lid,int,sum,知识,汇总,mid,rid,id
From: https://www.cnblogs.com/dfxjlsx/p/18021548

相关文章

  • 故事+动图,让PID知识通俗易懂!
    第一部分  啥是PID?PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。PID已经有107年的历史了。它并不是什么很神圣的东西,大家一定都见过PID的实际应用。比如四轴飞行器,再比如平衡小车......还有汽车的定速巡航、3D打印机上的温度控制器......
  • 前端知识回顾概览--vue.js 从入门到精通
    vue目前最火的前端框架之一对vue原理有深入了解可以基于vue开发应用对vue3.0有实战经验1. vue.js基础vue.js简介vue.js模版及指令vue.js事件/数据绑定vue.js组件化标签中的新属性vue.js组件生命周期2. vue.js高级用法mixin复用vue.js动画特效&......
  • 前端知识回顾概览--ES进阶
    了解ES新增特性并熟悉1. ES6规范详解ECMAScript规范发展简介ES6新增API解析&&ESNext规范中的API解析generator/asyncawait简介函数进阶(箭头函数、默认参数)模板字符串对象和数组的扩展用法Proxy、Reflect、Map、Set、Symbolfor...of、迭代器模式、生成......
  • 前端知识回顾概览--JavaScript 高级
     掌握JS语言,针对闭包、原型链等有深入理解对typescript静态化工具熟练掌握精通常见设计模式了解函数式编程 1.this指针/闭包/作用域this指针详解闭包的概念及应用场景作用域(全局作用域/函数作用域)默认绑定、显式绑定、隐式绑定存储空间、执行上下文2.面向对象编......
  • 前端知识回顾概览--商业级项目实战
    1.大厂性能的计算方式与优化方案网页性能指标影响因素客户端缓存策略异步加载按需加载bigpipe浏览器原理与PWA2.大厂前端页面的质量保障单元测试上线规范预发环境线上日志及报警定时自动检查页面3.上列表无限滚动方案不同框架的实现方案渲染卡顿的解决方案高性能......
  • 前端知识回顾概览--原生开发
    1.现代hybrid开发与原理剖析hybrid是什么现代hybrid开发与原理剖析现有开源解决方案源码解析JsBridge原理Android的JsBridge源码分析 2.electron入门与原理介绍electron入门与原理介绍Electron运行时的基本结构分析主进程与渲染进程之间的差异以及相互通信Elec......
  • 前端知识回顾概览--工程化
    知道如何让项目开发更加规范对自动化开发、部署、测试有一定了解 1.前端工程化详解前端工程化的发展-从模块化到工程化babel编译工具链的使用+babelplugin拓展工程化脚手架脚手架核心原理2.自动化构建常用自动化构建工具NpmScripts、Grunt、Gulp、FIS3We......
  • 前端知识回顾概览--数据结构与算法
    1.算法-数据结构篇实现一个LRU缓存求环状链表树的前序、中序、后序遍历树的层序遍历获取树的层级实现类数组转数组实现DOM转JSON实现JSON转DOM实现树转数组实现数组转树实现对象打平2.算法-排序与双指针等n平方复杂度的排序有哪些?如何实现冒泡排序,如何进......
  • 前端知识回顾概览--Node.js-全栈基石
    了解web服务端编程,对运行原理与流程有深入理解能使用nodejs解决实际问题 1.node.js基础node.js环境搭建及原生模块解析node.jsCommonJS模块化及相关源码解析手写CommonJS规范实现原理2.node.js原理详解node.js事件循环模型Buffer/stream/events详解G......
  • 前端知识回顾概览--React 17+18
    react目前最火的前端框架之一状态管理、路由等一定要重点掌握熟悉常见API,并且有使用经验1.react.js基础react.js简介jsx模版语法及babel编译配置事件/条件渲染/列表渲染等基础用法react.js组件化及生命周期refs及ReactAPI详解create-react-appcli的......