摘要: 单调栈经常用来 找出每个数左边或者右边离它最近的比它大或者小的数 使用单调栈的做法是先将该数左边的数字存入一个栈中,当遍历到当前元素时,首先判断一下栈是否为空,(while)如果栈不为空,就判断一下当前栈顶元素和该数的大小,只要当前的栈顶元素比该数大,就弹出栈顶元素,直到栈为空或者找到一个比当前这个 阅读全文
posted @ 2023-03-09 18:30 chenxinyue 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 重点:队列是有队头指针hh和队尾指针tt,判断空的条件是如果hh>=tt,队列就为空。 栈只能从一个入口出入,栈底永远在0位置(这个位置不存元素)。但是队列是从队尾t a i l入队,从队头h e a d出队的。所以入队的过程其实会让队尾t a i l 沿着数组索引的增长方向增长,出队的过程则会让队 阅读全文
posted @ 2023-03-09 17:48 chenxinyue 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 重点:栈是先进后出,从栈顶进,也是从栈顶取。重点是判断空的条件和栈顶下标。 #include<iostream> using namespace std; int tt=0;//栈顶下标 const int N=1e5+10; int stk[N];//栈 int main(){ int m; ci 阅读全文
posted @ 2023-03-09 17:10 chenxinyue 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 首先要了解几个概念,假定b(n)是a(n)的差分数组。(1)差分数组:b(n)=a(n)-a(n-1),(2)a(i)数组的值是差分数组b(1)-b(i)的和。即前缀和sum(i)。差分数组的前缀和:b(n)+=b(n-1)(3)在b(l)的基础上+c,在b(r+1)的基础上-c,就是在a(l)-a 阅读全文
posted @ 2023-03-09 16:38 chenxinyue 阅读(14) 评论(0) 推荐(0) 编辑
摘要: #include<iostream> using namespcae std; const int N=1e4+10; int st[N]; int num=0; int main(){ int n,k; cin>>n>>k; for(int i=1;i<=n;i++){ int x; cin>>x 阅读全文
posted @ 2023-03-09 16:00 chenxinyue 阅读(36) 评论(0) 推荐(0) 编辑
摘要: #include<iostream> using namespace std; const int N=1e5+10; int a[N],st[N]; int num=0; int main(){ int n,q; cin>>n>>q; for(int i=1;i<=n;i++){ cin>>a[i 阅读全文
posted @ 2023-03-09 15:46 chenxinyue 阅读(14) 评论(0) 推荐(0) 编辑