首页 > 其他分享 >20240201-高级数据结构总结

20240201-高级数据结构总结

时间:2024-02-03 09:44:39浏览次数:24  
标签:总结 cnt int tree mid 20240201 vis build 数据结构

待办:
倍增
并查集
线段树合并
set
逆序对
树
动态开点

线段树

  • 套用模版
#include<bits/stdc++.h>
using namespace std;
#define M 100005
#define ll long long
struct node{
	int L,R,cnt,vis;
}tree[400005];
int a[M],b[M],c[M],f[M];
void build(int p,int l,int r){
	tree[p].L=l,tree[p].R=r;
	if(l==r) return;
	int mid=tree[p].L+tree[p].R>>1;
	build(2*p,l,mid);
	build(2*p+1,mid+1,r);
}
void up(int p){
	tree[p].cnt=2e9;
	if(tree[2*p].vis) tree[p].cnt=tree[2*p].cnt;
	if(tree[2*p+1].vis) tree[p].cnt=min(tree[p].cnt,tree[2*p+1].cnt);
	tree[p].vis=(tree[2*p].vis||tree[2*p+1].vis);
}
void add(int p,int x,int a){
	if(tree[p].L==tree[p].R){
		tree[p].cnt+=a;
		if(tree[p].cnt)tree[p].vis=1;
		else tree[p].vis=0;
		return;
	}
	int mid=tree[p].L+tree[p].R>>1;
	if(x<=mid) add(2*p,x,a);
	else add(2*p+1,x,a);
	up(p);
}
int query(int p){
	if(tree[p].L==tree[p].R) return tree[p].L;
	if(tree[2*p+1].vis&&tree[2*p+1].cnt==1) return query(2*p+1);
	else if(tree[2*p].vis&&tree[2*p].cnt==1) return query(2*p);
	return -1;
}
signed main(){
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i];
	}
	sort(b+1,b+n+1);
	int len=unique(b+1,b+n+1)-b;
	for(int i=1;i<=n;i++) c[i]=lower_bound(b+1,b+len+1,a[i])-b,f[c[i]]=a[i];
	build(1,1,100000);
	for(int i=1;i<=k;i++) add(1,c[i],1);
	for(int i=1;i<=n-k+1;i++){
		int ans=query(1);
		if(ans==-1)puts("Nothing");
		else cout<<f[ans]<<endl;
		add(1,c[i],-1);
		if(i-k<=n) add(1,c[i+k],1);
	}
	return 0;
}

并查集(待学)

倍增

  • 思想

  • 画图

分块

  • 以前学习笔记

  • 很好用

标签:总结,cnt,int,tree,mid,20240201,vis,build,数据结构
From: https://www.cnblogs.com/Firepaw-cattery/p/18004363

相关文章

  • $CDQ$ 分治总结
    \(CDQ\)分治是一种特殊的分治方法,基本思想就是前一半的结果辅助后一半答案解答。一、归并排序提到\(CDQ\)分治,就不得不提到归并排序。作为一种似乎只有在瑞士轮里才有用的算法,归并排序有着优秀的时间复杂度,短小精悍的代码,十分的可爱。首先,我们将问题转换成这样(\(l,r\)代......
  • noip2023总结
    三年OI一场空,不开LL见祖宗我开LL了这仅仅是个总结noip2023游记难度:CSP-J<CSP-S<NOIp本人所获分数:CSP-J<CSP-S<NOIp看着好像没什么问题是吧,你细看,你再看可能基础还是不够扎实,就连教练都说我不是正常的人了平时对一些知识点掌握不够扎实,只会一点皮毛我还有一个问......
  • Python数据结构与算法03-单循环链表
    单循环链表classListNode:def__init__(self,val,next=None):self.val=valself.next=nextclassSingleLoopLinkList:def__init__(self,node=None):self.__head=nodeifnode:#如果不是空链表node.next=node......
  • 2.2寒假每日总结24
    使用的HBuilderX版本:3.98Git插件已安装:项目结构如下:右击项目目录,在git命令中-》检查已修改,可以发现还是能检索到修改过的文件:文件是有修改过的,但是在上图中没有任何的修改标识,这些文件也没有添加到.gitignore配置中。二、问题解决......
  • 八上学期总结
    这个学期这么精彩,总结还是要写写的。。。就是比较碎碎念。。。OI第一次CSPCSP2022游记每周模拟赛成绩起伏很大。。。最高#9最低#19学到很多东西更加认识到我是蒟蒻这件事实stokthsjrswjorz和高一训练认识了MO&OI都厉害的学姐@AmyYang敲开心的MO......
  • 2024.2.2寒假每日总结24
    算法题:1686.石子游戏VI-力扣(LeetCode)最最简单的超级马里奥训练过程fromnes_py.wrappersimportJoypadSpaceimportgym_super_mario_brosfromgym_super_mario_bros.actionsimportSIMPLE_MOVEMENTimporttimefrommatplotlibimportpyplotaspltfromstable_basel......
  • selenium出现“element not interactable”问题总结
    “elementnotinteractable”问题根因:元素不可交互,可能的原因及解决方法如下所示:1、检查元素的定位(XPATH、CSS_SELECTOR内的内容)是否写正确2、代码中元素进行获取的时候查看是否已经加载出来,等待元素加载可以使用显式等待element= WebDriverWait(browser,20,0.5).until(EC.p......
  • 关于Nest.js循环引用问题的总结
    首先上代码 这个东东中,AuthService就是触及了循环依赖的东西(纯自学搞了半天才找出毛病),首先什么是循环依赖,唉!问题来了在某些文章是这样说的"Circulardependency"error¶偶尔你会发现在你的应用程序中很难避免circulardependencies。您需要采取一些步骤来帮助Nest解......
  • 2023 总结
    2023总结一、我做了什么?年初的时候,印象里是元宵后吧,来北京提前实习了;然后就是毕业设计吧,把在海康的时候写的链路分析工具改了一下作为毕设项目;然后就是本科毕业,虽然才过去了半年,但好像那已经是很久很久以前了的样子;然后去了一趟西藏,我觉得我应该去一些稍微特殊一点的地方,所......
  • 【pytest】Hook钩子函数完整API总结
    pytest的钩子函数有很多,通过钩子函数的学习可以了解到pytest在执行用例的每个阶段做什么事情,也方便后续对pytest二次开发学习。详细文档可以查看pytest官方文档https://docs.pytest.org/en/latest/reference.html#hooks钩子函数总结第一部分:setuptools引导挂钩要求足够早注......