#include#include #define M 4using namespace std;class LoserTree{private: // 调整K为2的整数次幂 int round(int k) { if(k&(k-1)!=0) { int i=0; for(i=31;i>=0;i--) { if(((1< =1) { if(_data[_ls[t]]<_data[sData]) { int tmp=sData; sData=_ls[t]; _ls[t]=tmp; } t=t/2; } _ls[0]=sData; } const int _k; int _n; // 败者树应留下多少空间存放根节点 int *_data; // 存放数据 int *_ls; // 存放败者树的结构public: const int MINKEY; const int MAXKEY; void print(int *ls,int n) { cout<<"|||||||||||||||"< =_n+1;i--) { ajust(i); print(_ls,_n+_k+1); } return _ls[0]; } int next(int index,int value) { _data[index]=value; ajust(index); return _ls[0]; } LoserTree(int k):_k(k),MINKEY(1<<31),MAXKEY(~(1<<31)) { _n=round(_k)-1; // 计算前面应当预留多少空间 _data=new int[_k+1]; _ls=new int [_n+_k+1]; _ls[_k]=MINKEY; } ~LoserTree() { delete []_data; delete []_ls; }};int main(){ int input[M],i; for(i=0;i