2021牛客暑假多校第二场 K题—Stack

题意:

一个单调栈,给你第n次操作时里面数据的数量,让你给出里面塞入的会是哪些数字。

主要思想:链表模拟

(代码里面有注释)
(题解一开始说的是拓扑,后来标程给的是链表,发现链表更加容易理解一些)

题目传送门
(题面粘贴过来比较难看,就不贴了)

#include<iostream>
#include<algorithm>
#include<cmath>
#include<stack>
#include<vector>
#include<queue>
#include<set>
#include<cstring>
#include<list>
#include<map>
#include<cstdio>
typedef long long ll;
typedef int64_t s64;
using namespace std;
const int maxn=1e6+5;
//解题思路:链表
int n,m;
int l[maxn],r[maxn],b[maxn];   //l数组代表改数左边是谁 l[1]=2就是1的左边是2//同理 r数组代表改数左边是谁 //b数组就是题中给的那个b
int stk[maxn];                 //模拟栈的数组void link(int a,int b){l[b]=a;r[a]=b;   //用于链表的连接
}int ans[maxn];
void solve(){link(0,n+1);        //给了这个链表头和尾 头是0 尾是6int pos=1,ns=0;    //ns 表示是栈里第几个 pos是当前第几个数即是当前的数 //(这个pos可能暂时不是很理解但继续读下去可能会慢慢明白)for(int i=1;i<=n;i++){         //开始跑b数组if(b[i]==-1) continue;     //当没有给定的时候直接跳过(在主函数里会给b数组全部赋值为-1 当进来其他数时才会更改)if(b[i]<1||b[i]>i) {cout<<-1<<endl;return;}    //非法情况(即是小于1或者大于当前可容纳最多的)if(b[i]-ns>i-pos+1) {cout<<-1<<endl;return;}   //非法情况(即是当前需要增加的个数大于了我剩余可以给的个数)//可以理解为我给了你所有的数都不够满足你的要求(没错就是在骂你贪心 你这个贪心怪!)while(pos<=i){       //判断当前第几个数(pos)是否小于当前栈可以给的最多个数(i)//(这里说的不是很清楚你们草稿纸模拟一下试试 但是你们要坚强不可以哭 不明白就来问我我帮你们用手模拟)if(ns<b[i]){     //当前栈中的元素个数小于我们需要的,因为是小于的所以按照顺序正常添加即可link(pos,r[stk[ns]]);  // 当前数连接我栈顶的右边一个(这里要注意我们一开始那个6没有进栈哦 所以第一次连接的话栈顶(0)右边一个数就是6)link(stk[ns],pos);     //栈顶数再连接我当前数stk[++ns]=pos;         //ns++就是栈中数据个数加一 然后当前位置的数变为栈顶}else{        //当前栈中的元素个数大于我们需要的,因为是大于的所以要往前插入ns=b[i]-1;  //每次就往前一个插入直到我们满足要求为止link(pos,r[stk[ns]]); //此处连接同上 就是连接位置不一样要注意link(stk[ns],pos);  //此处也同上stk[++ns]=pos;   //此处更是同上 (这次题解写的我自己都觉得拗口)}++pos;   //当前第几个数往后一个}}while(pos<=n){  //当整个循环结束当前数还是小于n 我们就把他正常插入填满就好 就是和当前栈中元素小于我们所需时候一样插入link(pos,r[stk[ns]]);  //同上link(stk[ns],pos);     //同上++pos;                 //同上}for(int i=r[0],cnt=1;i<=n;i=r[i],cnt++){ //从第一个开始往后找自己右边那个(就是把链表跑一边并且呈现在ans中)ans[i]=cnt;}for(int i=1;i<=n;i++){i==1?cout<<ans[i]:cout<<" "<<ans[i];   //输出}cout<<endl;
}int main(){  //主函数里面大部分就是题目要求的输入啦 写到这里你就要ac啦!cin>>n>>m;    for(int i=1;i<=n;i++){b[i]=-1;}int x;for(int i=1;i<=m;i++){cin>>x;cin>>b[x];}solve();return 0;
}
//加油!你又补完一题啦!

加油加油!!

2021牛客暑假多校第二场 K题—Stack (链表)相关推荐

  1. 2020牛客暑假多校第二场补题

    比赛链接:link 题目 A kmp + Hash B 几何 C dfs D 签到题 F 单调区间 + gcd筛 G bitset神奇用法 H 权值线段树(动态开点/离散化) J 群论     A k ...

  2. 牛客暑假多校第二场 K carpet

    题意:给你一个n*m的矩阵 ,每个位置都有一个字符并且都有一个值,现在需要找到一个p*q的子矩阵, 原来的矩阵可以由现在这个矩阵无限复制然后截取其中的一部分得到,并且要求 子矩阵里最大的值 * (p+ ...

  3. 2021牛客暑假多校第八场 K题—Yet Another Problem About Pi

    2021牛客暑假多校第八场 K题-Yet Another Problem About Pi 题意:告诉你一个单元格的长和宽,问你走Π(3.1415926-)的长度距离最多可以走几个单元格 思路:沿着单 ...

  4. 2021牛客暑期多校训练营1, 签到题DFBG

    2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...

  5. 2021牛客NOIP提高组第二场T2——方格计数(组合数计数)

    方格计数 description solution code description 在左下角是 (

  6. 2021牛客暑期多校训练营2 K Stack

    题目大意: 题目告诉你利用单调栈几个点前面比它小并包含它自身的元素有多少个 让你构造一个包含1到n并每个数字只出现一次的序列 思路: 我们可以对于每个点都算出栈中元素的数量 对于没有给出的点的栈中元素 ...

  7. 2021牛客暑期多校训练营1 赛后总结

    比赛名称: 2021牛客暑期多校训练营1 比赛时间: 2021年7月17日 12:00 - 17:00 比赛结果: 3/11 自我总结: 这场比赛应该算是这个假期的第二场团队赛了, 之前打过一个比较简 ...

  8. 2021牛客暑期多校训练营7

    2021牛客暑期多校训练营7 文章目录 2021牛客暑期多校训练营7 F:xay_loves_trees 解释 代码 H:xay_loves_count 解释 代码 I:xay_loves_or 解释 ...

  9. 2021牛客暑期多校训练营9 Cells(LGV引理,FFT)

    2021牛客暑期多校训练营9 Cells(LGV引理,FFT) 题目链接 题意 在一个无限大的xyxyxy​坐标轴上,求从A={(0,a1),(0,a2),...,(0,an)}A=\{(0,a_1) ...

最新文章

  1. 火爆全网,却只有4页!ICLR爆款论文「你只需要Patch」到底香不香?
  2. Flash与数学:球体曲面 (2)
  3. [转]DML DDL DCL 语言的区别
  4. nyoj-492 King(状态压缩)
  5. cake-build -.Net Core 跨平台构建自动化系统
  6. IO中的阻塞、非阻塞、同步、异步概念分析详解(通俗易懂)
  7. 比特币以太坊数字货币钱包安全助记词安全问题
  8. python整数运算定律_PHP 操作redis 详细讲解
  9. CloudCompare:汉化
  10. 机器人开发--技术路线简介
  11. 实时取色器(RGB)
  12. 8.1.CentOS7安装Spark安装部署及standalone模式介绍
  13. Java8实现List转Map
  14. PBFT(一):过程
  15. Acer宏基笔记本FN快捷键大全
  16. 蓝牙4.0和5.0的区别
  17. 使用node.js 脚手架搭建Vue项目
  18. 华为ensp 启动ar设备失败,错误代码 :40
  19. nds linux模拟器下载,NDS模拟器
  20. 安卓常用控件--列表视图

热门文章

  1. python图片修改过、有原图、怎么得到改动的地方_python--修改证件照的大小
  2. 算法的五大要素 学计算机必备
  3. 安防海量高清视频无损压缩—四川省智慧公共安全系统案例
  4. mmdection的安装、测试,心酸历程
  5. 联网技术架构讨论:Facebook 如何管理150亿张照片
  6. [数论+模板] 分解质因数(模板)
  7. Python生成中文词云图(二):不可指定词云特定的形状和颜色。
  8. GPT-3的50种玩法告诉你,它很酷,但是没有通过图灵测试
  9. RPO和RTO是什么?
  10. excel的合并和分开and转为在线文档