Re0(单调栈)
来源:互联网 发布:维多利亚2 mac 中文 编辑:程序博客网 时间:2024/05/05 04:07
Think:
因为要满足题意,所以优先 采用单调栈来进行解题。 这是春节的题目 2333, 然后半年过去了, 才写解题报告(手动滑稽)。
我的思路就是 建立结构体来储存 威胁数, 然后利用单调栈的特性来进行计算 威胁数, 进而储存。 输出时,输出相对应的a[key].cnt值即可~~
主要坑点:战力相同的情况要忽略, 反正 我 WA了3发都是这个原因
Problem Description
Re0 虽然是老套的穿越剧情,但是却有着虐男主 (486) 的新奇点子。作为 2016 最火的番,我们来统计一下其中每个人能看到的对手的人数吧。
对于当前的人,他只能看见战力从他依次增高的一个阶梯。譬如说对于战力分别为 6, 5, 1, 2, 3, 4, 0 的一个分布来说,第一个向前看去看到的对手人数为 0,第二个向前看去能看到战力为 6 的人,看到的对手人数为 1,第三个向前看去能看到战力为 6, 5 的 2 人,第四个向前看去能看到战力为 6, 5 的 2 人,第五个向前看去能看到战力为 6, 5 的 2 人,第六个向前看去能看到战力为 6, 5 的 2 人,第七个向前看去能看到战力为 4, 5, 6 的 3 人。而战力为 1, 2, 3 的人会被战力为 4 的人所屏蔽掉。
Input
输入数据有多组(数据组数不超过 20),到 EOF 结束。
对于每组数据:
第一行输入一个整数 n, m 表示要统计的总人数和询问的次数。
接下来一行有 n 个以空格分隔的正整数,表示 n 个人的战力分布。
接下来 m 行,每行一个正整数 pos,表示要询问的人的位置,位置标号按照输入从 1~n。
数据范围:1 <= n, m <= 100000,战力范围为 1~1000。
Output
对于每组数据中的每次询问,输出一个正整数表示此人向前看去能够看到的对手(威胁)数。
Example Input
7 7
6 5 1 2 3 4 0
1
2
3
4
5
6
7
Example Output
0
1
2
2
2
2
3
#include<bits/stdc++.h>using namespace std;struct node{ int cnt;} a[1008611];int main(){ int n, hi, i; int m; while(cin >> n >> m) { stack<int>s;// scanf("%d",&hi);// s.push(hi); for (i = 1; i <= n; i ++) { a[i].cnt = 0; scanf("%d",&hi); while(!s.empty() && s.top() <= hi) s.pop(); a[i].cnt = a[i].cnt + s.size(); s.push(hi); } for (i = 1; i <= m; i ++) { int key; cin >> key; cout << a[key].cnt << endl; } }}
- Re0(单调栈)
- 单调栈 单调队列
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 苹果手机的备份方法:iCloud备份和数据恢复使用教程
- strcpy
- ShuffleNet——面向移动设备的极为高效的卷积神经网络
- 新手上路系列7:系统调用函数与标准i/o实现文件的复制
- Java程序员应该知道的10个调试技巧(转载)
- Re0(单调栈)
- 百练4039:IP地址转换题解
- linux定时任务未触发
- Largest Rectangle in a Histogram
- HDU 6055 Regular polygon
- C语言之字符串与指针
- mysql 中 unix_timestamp和from_unixtime 时间戳函数
- 七大查找算法
- Ubuntu下 Nginx 反向代理 Apache、Tomcat