1396: 队列问题(2)
zcmu:
1396: 隊列問題(2)
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 71 Solved: 27
[Submit][Status][Web Board]
Description
有一個含有n個元素的隊列q,每個元素的大小滿足1<=xi<=9(0<i<n)。隊列有一種操作,對于隊首元素若是整個隊列最大的則出隊列,否則加入隊尾。對于一個給定的m,你能告訴我xm是第幾個出隊列的嗎?
Input
輸入數據第一行是一個整數T(1<=T<=1000),表示輸入數據的組數;每組數據的第一行是兩正整數n表示隊列的大小和第幾個元素(1<n<=1000,0<=m<n),第二行有n個數xi ,分別代表每個元素的大小。
Output
對于每組測試數據,輸出xm是第幾個出隊列。
Sample Input
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
Sample Output
1
2
5
HINT
Source
//重點是理清楚思路,要不然會浪費很多時間!!
Ac_code:
/*
總結:
STL 中隊列的使用(queue)
1.頭文件:
按道理是加: #include <queue>和using namespace std;
但是我用codeblock加上去卻無效
所以我用“比較萬能”的頭文件:
#include <bits/stdc++.h>和using namespace std;
2.定義方法:
1).普通定義
queue<int>q;2).結構體
struct date { int x;int y; }; queue<date>q;3.基本操作:
q.push(x) //將x壓入q隊尾q.pop() //彈出q隊列的第一個元素(隊頭元素),注意此函數并不返回任何值q.front() //返回q隊第一個元素(隊頭元素)q.back() //返回q隊最后被壓入的元素(隊尾元素)q.empty() //當q隊列為空時,返回trueq.size() //返回q隊列的長度附加:STL 中優先隊列的使用方法(priority_queu)
優先隊列容器與隊列一樣,只能從隊尾插入元素,從隊首刪除元素。但是它有一個特性,就是隊列中最大的元素總是位于隊首,所以出隊時,并非按照先進先出的原則進行,而是將當前隊列中最大的元素出隊。這點類似于給隊列里的元素進行了由大互小的順序排序。元素的比較規則默認按元素值由大到小排序,可以重載“<”操作符來重新定義比較規則。
使用方法:
1.頭文件:
#include <queue>using namespace std;(實在沒辦法就用萬能頭文件~)
2.定義方式:
1.)普通方法:
priority_queue<int>q; //通過操作,按照元素從大到小的順序出隊 priority_queue<int,vector<int>, greater<int> >q; //通過操作,按照元素從小到大的順序出隊2).結構體:
struct date { int x, y; friend bool operator < (date a, date b) { return a.x > b.x; //結構體中,x小的優先級高 } }; priority_queue<date>q; //在該結構中,y為值, x為優先級。 //通過自定義operator<操作符來比較元素中的優先級。 //在重載”<”時,最好不要重載”>”,可能會發生編譯錯誤自定義優先級:
struct cmp { operator bool ()(int x, int y) { return x > y; // x小的優先級高 //也可以寫成其他方式,如: return p[x] > p[y];表示p[i]小的優先級高}};priority_queue<int, vector<int>, cmp>q; //定義方法//其中,第二個參數為容器類型。第三個參數為比較函數。3.基本操作:
q.empty() //如果隊列q為空返回真q.pop() // 刪除q隊列隊頂元素q.push() //q隊列加入一個元素q.size() //返回優先隊列q中擁有的元素個數**q.top() //返回優先隊列q隊頂元素**在默認的優先隊列中,優先級高的先出隊。在默認的int型中先出隊的為較大的數。
*/
總結
以上是生活随笔為你收集整理的1396: 队列问题(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1874: 生活大爆炸版石头剪刀布
- 下一篇: 1776: Press the swit