当前位置: 首页 > news >正文

做平面设计都在那个网站找免费素材汨罗网站seo

做平面设计都在那个网站找免费素材,汨罗网站seo,如何做网站代理,网页源码怎么做网站单调递增栈:栈中数据入栈单调递增序列(栈底到栈顶是单调递增); 单调递减栈:栈中数据入栈单调递减序列(栈底到栈顶是单调递减)。 单调递增栈: 维护单调递增栈:遍历数组中每一个元素,执行入栈:每次入栈前先…

单调递增栈:栈中数据入栈单调递增序列(栈底到栈顶是单调递增);
单调递减栈:栈中数据入栈单调递减序列(栈底到栈顶是单调递减)。

单调递增栈:

维护单调递增栈:遍历数组中每一个元素,执行入栈:每次入栈前先检验栈顶元素和进栈元素的大小。
如果栈空或进栈元素大于栈顶元素则直接入栈;如果进栈元素小于等于栈顶元素,则出栈,直至进栈元素大于栈顶元素。

int a[max];
int n;
stack<int>q;
for (int i = 1; i <= n; i++) {while (!q.empty() && a[i] <= q.top()) {q.pop();}q.push(a[i]);
}

单调递减栈:

维护单调递增栈:遍历数组中每一个元素,执行入栈:每次入栈前先检验栈顶元素和进栈元素的大小。
如果栈空或进栈元素小于栈顶元素则直接入栈;如果进栈元素大于等于栈顶元素,则出栈,直至进栈元素小于栈顶元素。

int a[max];
int n;
stack<int>q;
for (int i = 1; i <= n; i++) {while (!q.empty() && a[i] >=q.top()) {q.pop();}q.push(a[i]);
}

题解:

 运用单调递减栈,并用标记下标的方式来入栈,当找到一个元素大于栈顶元素时,用另外一个数组来记录栈顶元素对应的下一个最大值(此题我用的为手搓栈)

#include <stdio.h>// 定义一个足够大的数组来模拟栈(这里假设数列元素个数不会超过1000,可根据实际情况调整)
#define MAX_SIZE 1000
int stack[MAX_SIZE];
int top = -1;// 判断栈是否为空
int stack_empty() 
{return top == -1;
}// 入栈操作
void stack_push(int element)
{if (top < MAX_SIZE - 1) {stack[++top] = element;}
}// 出栈操作
int stack_pop()
{if (!stack_empty()){return stack[top--];}return -1;  // 表示栈为空时的一种返回情况
}// 获取栈顶元素
int stack_peek() 
{if (!stack_empty()) {return stack[top];}return -1;  // 表示栈为空时的一种返回情况
}// 求f(1...n)
void find_f(int* a, int n, int* result) 
{for (int i = n - 1; i >= 0; i--){while (!stack_empty() && a[stack_peek()] <= a[i]){stack_pop();}result[i] = stack_empty() ? 0 : stack_peek() + 1;stack_push(i);}
}int main() 
{int n;scanf("%d", &n);int a[n];for (int i = 0; i <n; i++)scanf("%d", &a[i]);int result[n];find_f(a, n, result);for (int i = 0; i < n; i++){printf("%d ", result[i]);}return 0;
}

 此题与上一题大致相同,都是向右查找第一个大于他的值,所以也用单调递减栈

#include <iostream>
#include<vector>
#include<stack>
#include<cstring>
using namespace std;
int a[100000], b[100000];
int n;
int main() {cin >> n;stack<int>q;for (int i = 0; i <n; i++) {cin >> a[i];}memset(b, 0, sizeof(b));q.push(0);for (int i = 1; i <= n; i++) {while (!q.empty() && a[i] > a[q.top()]) {b[q.top()] = i+1;q.pop();}q.push(i);}for (int i = 0; i < n; i++) {cout << b[i] << endl;}return 0;
}

 后缀最大值就是向后第一个大于他的值,与上两题相同,不过此处要求的是位异或和

 (此题我用的数组模拟栈,如果要换成栈的话直接将数组b改成栈即可)

 

#include<iostream>
using namespace std;
unsigned long long a[1000001];
int b[1000001], n;
int main() {scanf("%d", &n);int j = 0, i;int ans = 0;for (int i = 1; i <= n; i++) {scanf("%llu", &a[i]);if (j == 0) {b[++j] = i;ans = ans ^ i;}else {if (a[i] < a[b[j]]) {b[++j] = i;ans = ans ^ i;}else {while (j > 0 && a[i] >= a[b[j]]) {ans = ans ^b[j]; j--;}b[++j] = i;ans = ans ^ i;}}printf("%d\n", ans);}return 0;
}

 

 单调递减栈,不过此处的等于要单独进行讨论,并且用结构体记录人数

#include<iostream>
#include<stack>
# define int long long
const int maxx = 1000000;
using namespace std;
int n;
struct node {int h, num;
}a[maxx];
long long ans;
stack<node>q;
signed main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i].h, a[i].num = 1;}int ans = 0;for (int i = 1; i <= n; i++) {while(!q.empty() && a[i].h > q.top().h){ans += q.top().num;q.pop();}if (!q.empty() && a[i].h == q.top().h){node qwq = q.top();ans += q.top().num;q.pop();if (!q.empty())ans++;q.push(node{ qwq.h, qwq.num + 1 });}else{if (!q.empty())ans++;q.push(a[i]);}}cout << ans;return 0;
}

 

http://www.hkea.cn/news/642807/

相关文章:

  • 外贸网站建设入门深圳网络推广哪家
  • 网站模板资源公司网站推广
  • 广东省建设教育协会官方网站首页html简单网页代码
  • 个人网站意义阿里指数官网最新版本
  • 网站开发方式有哪四种搜索引擎优化课程总结
  • 申请做网站、论坛版主app推广接单
  • 青海网站建设广州seo优化推广
  • 物流公司网站制作模板上海网站关键词排名
  • 广西建设人才网搜索引擎优化的目标
  • 比汉斯设计网站素材图片搜索识图入口
  • php网站架设教程英雄联盟韩国
  • 做毕设好的网站百度客服电话24小时
  • 上海手机网站建设电话咨询seo综合查询系统
  • wordpress 4.6 中文版沈阳seo
  • 文件管理软件天津搜索引擎优化
  • 九亭网站建设全国疫情高峰时间表最新
  • 青岛网站建设公司武汉seo收费
  • mvc网站建设的实验报告怎么做优化
  • 有官网建手机网站千锋教育培训多少钱费用
  • b2c交易模式的网站有哪些百度营销客户端
  • flash 学习网站重庆网站seo多少钱
  • 年终总结ppt模板免费下载网站小红书seo排名规则
  • 自己架设网站口碑营销的产品有哪些
  • 湖北省网站备案最快几天天津百度推广排名优化
  • app在线开发制作平台seo网络优化前景怎么样
  • 商务网站的基本情况网站建设工作总结
  • 山西建设厅网站网络销售怎么聊客户
  • 软装素材网站有哪些seo网络排名优化哪家好
  • 邯郸市做网站建设网络口碑营销案例分析
  • 罗湖网站建设联系电话西安核心关键词排名