操作一波栈与队列
栈和队列分别包括在头文件<stack> 和 <queue> 中
对栈(FILO, 先入后出)的操作:
定义栈 : stack<int> stk;
- s.empty() 如果栈为空返回true,否则返回false
- s.size() 返回栈中元素的个数
- s.pop() 删除栈顶元素
- s.top() 返回栈顶的元素
- s.push() 在栈顶压入新元素
对队列(FIFO, 先入先出)的操作:
定义队列:queue<int>que
- q.empty() 如果队列为空返回true,否则返回false q.back() 返回队列尾元素的值,但不删除该元素
- q.size() 返回队列中元素的个数
- q.pop() 删除队列首元素但不返回其值
- q.front() 返回队首元素的值,但不删除该元素
- q.push() 在队尾压入新元素
- 探讨一个小题
#include <stack> #include <stdio.h> #include <iostream> using namespace std; int main() { stack<int> S; int n; __int64 sum; while(~scanf("%d", &n)) { sum = 0; int m; scanf("%d", &m); S.push(m); for(int i = 1; i < n ; i++) { scanf("%d", &m); while(!S.empty() && m >= S.top()) S.pop(); sum += S.size(); S.push(m); } printf("%I64d", sum); while(!S.empty()) S.pop(); } return 0; }