随笔分类 -  数据结构

摘要:#include <bits/stdc++.h> #define ll long long #define N 4000010 using namespace std; ll t[N],a[N],num[N],mt[N],mod; void build(ll p, ll l, ll r) { mt[ 阅读全文
posted @ 2021-02-03 11:11 君与 阅读(82) 评论(0) 推荐(0)
摘要:给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1、“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。 2、“Q l r”,表示询问 数列中第 l~r 个数的和。 对于每个询问,输出一个整数表示答案。 #include<bits/stdc++.h> 阅读全文
posted @ 2021-02-02 11:14 君与 阅读(53) 评论(0) 推荐(0)
摘要:#include<bits/stdc++.h> using namespace std; const int N=2e6+5,inf=-0x3f3f3f3f; struct node{int l,r,sum,mx,dl,dr;}t[N]; int a[N],n,m,x,y,z; void in(no 阅读全文
posted @ 2021-02-02 11:12 君与 阅读(64) 评论(0) 推荐(0)
摘要:#include<bits/stdc++.h> #define N 1000100 using namespace std; struct node { int l,r; int data; }e[4*N]; int n,m,cut; void build(int xh,int l,int r) { 阅读全文
posted @ 2021-02-02 10:45 君与 阅读(65) 评论(0) 推荐(0)
摘要:有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高。 现在这n头奶牛站成一列,已知第i头牛前面有a头牛比它低,求每头奶牛的身高。 #include<bits/stdc++.h> using namespace std; const int N=1e5+5; int a[N] 阅读全文
posted @ 2021-02-01 10:55 君与 阅读(60) 评论(0) 推荐(0)
摘要:给定长度为N的数列A,然后输入M行操作指令。 第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。 第二类指令形如“Q X”,表示询问数列中第x个数的值。 对于每个询问,输出一个整数表示答案。 #include<bits/stdc++.h> #define N 1000000 usin 阅读全文
posted @ 2021-02-01 10:53 君与 阅读(52) 评论(0) 推荐(0)
摘要:#include<bits/stdc++.h> using namespace std; const int N=2e5+5; typedef long long ll; ll ans,l[N],r[N],a[N],c[N],n,m,mx; ll lowbit(ll x){return x&(-x) 阅读全文
posted @ 2021-02-01 10:50 君与 阅读(81) 评论(0) 推荐(0)
摘要:共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有两种: “M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; “Q a b”,询问编号为a和b的两个数是否在同一个集合中 #include<bits/stdc++.h 阅读全文
posted @ 2021-01-08 17:04 君与 阅读(58) 评论(0) 推荐(0)
摘要:在给定的N个整数选出两个进行xor(异或)运算,得到的结果最大是多少? #include<bits/stdc++.h> using namespace std; const int N=4e6+10; int ch[N][2],n,a,ans,tot=1; void insert() { int u 阅读全文
posted @ 2021-01-08 17:00 君与 阅读(57) 评论(0) 推荐(0)
摘要:维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x; “Q x”询问一个字符串在集合中出现了多少次。 共有N个操作,输入的字符串总长度不超过1e5,字符串仅包含小写英文字母。 #include <bits/stdc++.h> using namespace std; const 阅读全文
posted @ 2021-01-08 16:57 君与 阅读(76) 评论(0) 推荐(0)
摘要:给定一个大小为n≤106 的数组。 有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。 您只能在窗口中看到k个数字。 每次滑动窗口向右移动一个位置。 您的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。 #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2021-01-08 15:32 君与 阅读(48) 评论(0) 推荐(0)
摘要:给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。 #include<bits/stdc++.h> #define N 100010 using namespace std; int n,t,w,a[N],b[N]; int main() { scanf("%d",& 阅读全文
posted @ 2021-01-08 15:27 君与 阅读(57) 评论(0) 推荐(0)
摘要:实现一个队列,队列初始为空,支持四种操作: (1) “push x” – 向队尾插入一个数x; (2) “pop” – 从队头弹出一个数; (3) “empty” – 判断队列是否为空; (4) “query” – 查询队头元素。 现在要对队列进行M个操作,其中的每个操作3和操作4都要输出相应的结果 阅读全文
posted @ 2021-01-08 15:15 君与 阅读(95) 评论(0) 推荐(0)
摘要:实现一个栈,栈初始为空,支持四种操作: (1) “push x” – 向栈顶插入一个数x; (2) “pop” – 从栈顶弹出一个数; (3) “empty” – 判断栈是否为空; (4) “query” – 查询栈顶元素。 现在要对栈进行M个操作,其中的每个操作3和操作4都要 #include<b 阅读全文
posted @ 2021-01-08 15:09 君与 阅读(93) 评论(0) 推荐(0)
摘要:给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。 请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。 若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。 #include<bits/stdc+ 阅读全文
posted @ 2021-01-05 13:16 君与 阅读(74) 评论(0) 推荐(0)
摘要:给定一个n个点m条边的有向图,图中可能存在重边和自环。 所有边的长度都是1,点的编号为1~n。 请你求出1号点到n号点的最短距离,如果从1号点无法走到n号点,输出-1。 #include<bits/stdc++.h> using namespace std; const int N = 2e5+5; 阅读全文
posted @ 2021-01-05 13:01 君与 阅读(80) 评论(0) 推荐(0)
摘要:给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 #include<bits/stdc++.h> # 阅读全文
posted @ 2021-01-05 12:28 君与 阅读(115) 评论(0) 推荐(0)
摘要:实现一个双链表,双链表初始为空,支持5种操作: (1) 在最左侧插入一个数; (2) 在最右侧插入一个数; (3) 将第k个插入的数删除; (4) 在第k个插入的数左侧插入一个数; (5) 在第k个插入的数右侧插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。 题~目~ 阅读全文
posted @ 2020-12-18 16:28 君与 阅读(60) 评论(0) 推荐(0)
摘要:实现一个单链表,链表初始为空,支持三种操作: (1) 向链表头插入一个数; (2) 删除第k个插入的数后面的数; (3) 在第k个插入的数后插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。 注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了 阅读全文
posted @ 2020-12-18 16:13 君与 阅读(86) 评论(0) 推荐(0)