随笔分类 - 数据结构
摘要:#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[
阅读全文
摘要:给定一个长度为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>
阅读全文
摘要:#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
阅读全文
摘要:#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) {
阅读全文
摘要:有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高。 现在这n头奶牛站成一列,已知第i头牛前面有a头牛比它低,求每头奶牛的身高。 #include<bits/stdc++.h> using namespace std; const int N=1e5+5; int a[N]
阅读全文
摘要:给定长度为N的数列A,然后输入M行操作指令。 第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。 第二类指令形如“Q X”,表示询问数列中第x个数的值。 对于每个询问,输出一个整数表示答案。 #include<bits/stdc++.h> #define N 1000000 usin
阅读全文
摘要:#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)
阅读全文
摘要:共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有两种: “M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; “Q a b”,询问编号为a和b的两个数是否在同一个集合中 #include<bits/stdc++.h
阅读全文
摘要:在给定的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
阅读全文
摘要:维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x; “Q x”询问一个字符串在集合中出现了多少次。 共有N个操作,输入的字符串总长度不超过1e5,字符串仅包含小写英文字母。 #include <bits/stdc++.h> using namespace std; const
阅读全文
摘要:给定一个大小为n≤106 的数组。 有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。 您只能在窗口中看到k个数字。 每次滑动窗口向右移动一个位置。 您的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。 #include<bits/stdc++.h> using namespace
阅读全文
摘要:给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。 #include<bits/stdc++.h> #define N 100010 using namespace std; int n,t,w,a[N],b[N]; int main() { scanf("%d",&
阅读全文
摘要:实现一个队列,队列初始为空,支持四种操作: (1) “push x” – 向队尾插入一个数x; (2) “pop” – 从队头弹出一个数; (3) “empty” – 判断队列是否为空; (4) “query” – 查询队头元素。 现在要对队列进行M个操作,其中的每个操作3和操作4都要输出相应的结果
阅读全文
摘要:实现一个栈,栈初始为空,支持四种操作: (1) “push x” – 向栈顶插入一个数x; (2) “pop” – 从栈顶弹出一个数; (3) “empty” – 判断栈是否为空; (4) “query” – 查询栈顶元素。 现在要对栈进行M个操作,其中的每个操作3和操作4都要 #include<b
阅读全文
摘要:给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。 请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。 若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。 #include<bits/stdc+
阅读全文
摘要:给定一个n个点m条边的有向图,图中可能存在重边和自环。 所有边的长度都是1,点的编号为1~n。 请你求出1号点到n号点的最短距离,如果从1号点无法走到n号点,输出-1。 #include<bits/stdc++.h> using namespace std; const int N = 2e5+5;
阅读全文
摘要:给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 #include<bits/stdc++.h> #
阅读全文
摘要:实现一个双链表,双链表初始为空,支持5种操作: (1) 在最左侧插入一个数; (2) 在最右侧插入一个数; (3) 将第k个插入的数删除; (4) 在第k个插入的数左侧插入一个数; (5) 在第k个插入的数右侧插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。 题~目~
阅读全文
摘要:实现一个单链表,链表初始为空,支持三种操作: (1) 向链表头插入一个数; (2) 删除第k个插入的数后面的数; (3) 在第k个插入的数后插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。 注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了
阅读全文

浙公网安备 33010602011771号