【問題描述】
給定乙個長度為n的數列,現宣告兩種操作。
第一種操作add,將數列的第i個元素的值增加x
第二種操作query,詢問此時數列中最小的元素是哪個。
【輸入形式】
第一行為一正整數n(<=500000)表示數列長度。
第二行為n個整數,表示數列初始元素。
第三行為乙個正整數q(<=1000000),表示運算元。
接下來q行,每行描述一種操作:
add i x
表示數列第i(1<=i<=n)個元素增加x(-1000<=x<=1000)。
query
輸出此時數列中最小元素所在位置,以及最小值。多個最小值輸出下標最小的那個。
【輸出形式】
對於每個query操作,輸出一行,包含兩個數字,第乙個數字為最小值所在下標,第二個數字表示最小值。
【樣例輸入】5
1 2 3 4 5
5query
add 1 2
query
add 2 2
query
【樣例輸出】
1 12 21 3
#include
#include
#pragma once
using
namespace std;
template
<
class
t>
class
priorityqueue
//class 是類的標誌勿忘
;private
:int currentlength;
int maxsize;
int*map;
//匹配不同下標
struct node* node;
void
percolatedown
(int hole)
;//向下過濾
void
percolateup
(int hole)
;//向上過濾
public
:priorityqueue
(int size =
100)
~priorityqueue()
//構造析構類
void
buildheap()
;//建堆
bool
isempty()
const
//詢問類
void
gethead()
const
void
add(
const
int&x,
const
int&y)
;void
enqueue
(const t&x,
const
int&y)
;//非常量引用的初始值必須為左值};
template
<
class
t>
void priorityqueue
::add
(const
int&x,
const
int&y)
if(y >0)
}template
<
class
t>
void priorityqueue
::enqueue
(const t&x,
const
int&y)
//是加入t型別值,不是hole
template
<
class
t>
void priorityqueue
::percolatedown
(int hole)
if (array[hole * 2] > array[hole * 2 + 1])
先找到最小孩子再比較代際可以減少此處約一半計算數*/
/*while (hole*2 <= currentlength)
if (tmp > node1[child].elem || tmp == node1[child].elem&& tmp1 > node1[child].num)
else
}*/for(
; hole *
2<= currentlength; hole = child)
if(tmp > node[child]
.elem || tmp == node[child]
.elem&& tmp1 > node[child]
.num)
else
} node[hole]
.elem = tmp;
//賦值
node[hole]
.num = tmp1;
map[tmp1]
= hole;
}template
<
class
t>
void priorityqueue
::percolateup
(int hole)
else
} node[hole]
.elem = tmp;
//賦值
node[hole]
.num = tmp1;
map[tmp1]
= hole;
}template
<
class
t>
void priorityqueue
::buildheap()
//建堆
}int
main()
x.buildheap()
; cin >> m;
char ch[6]
;char ch1[6]
="add"
;char ch2[6]
="query"
;//string s;
int a, b;
for(i =
0; i <= m -
1; i++)if
(ch[0]
== ch2[0]
)//query
}system
("pause");
}
尋找旋轉陣列的最小值
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1。這道題的要求是尋找最小值,附加的條件是給出了兩個有序的陣列。如果旋轉的數字個數大於0 可...
同時尋找序列的最大最小值
問題描述 給定乙個長度為n n 2 的無序正整數序列ary,要求同時找到其中最大和最小值元素,並返回其和。分析 將最大值max和最小值min看成一對 mix,min 每次從序列中成對地取出兩個元素,將其中較小者與min比較並更新,將其中較大者與max必將並更新,這樣處理每一對元素只需要3次比較,整個...
尋找旋轉陣列中的最小值
假設乙個旋轉排序的陣列其起始位置是未知的 比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2 你需要找到其中最小的元素。你可以假設陣列中不存在重複的元素。分析 尋找陣列中某一類特定的值,很容易聯想到二分法。本題中陣列是旋轉的,而且是排序的,還是比較有規律,可以分情況討論mid的落點...