【基础数据结构】堆

1.堆的建立

数组和变量,vector和size

2.堆的建立

3.堆的删除

4.priority_queue

5.堆排序

[代码源堆排序]  http://oj.daimayuan.top/course/7/problem/492 

数组

#include
#include
#include
​
using namespace std;
​
typedef long long ll;
​
const int N = 200010;
​
int heap[N],len,n;
​
void up(int k){
    while(k>1&&heap[k]>n;
    len=0;
    for(int i=1;i<=n;i++){  //插入操作,队尾插入
        int x;
        cin>>x;
        heap[++len]=x;
        up(len);
    }   
    for(int i=1;i<=n;i++){  //删除操作,删除堆顶
        cout<>T;
    while(T--){
        s();
    }
    
    return 0;   
​
}
​

priority_queue

#include
#include
#include
#include
#include
​
using namespace std;
​
typedef long long ll;
​
const int N = 200010;
​
priority_queue,greater> q;
int n;
​
void s(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        q.push(x);
    }
    for(int i=1;i<=n;i++){
        cout<>T;
    while(T--){
        s();
    }
    
    return 0;   
​
}

2.合并数列

[代码源合并数列]  http://oj.daimayuan.top/course/7/problem/493 

#include
#include
#include
#include
​
using namespace std;
​
typedef long long ll;
​
const int N = 200010;
​
struct info{
    int v,delta;   //当前队列的一个值和公差
}heap[N];
​
priority_queue q;
int n,m,len;
​
void up(int k){
    while(k>1&&heap[k].v>n;
    len=0;
    for(int i=1;i<=n;i++){
        int k,b;
        cin>>k>>b;
        heap[++len].v=b;  //首项是b
        heap[len].delta=k;   //公差是k
        up(len);
    }
    cin>>m;
    for(int i=1;i<=m;i++){
        cout<>T;
    while(T--){
        s();
    }
    
    return 0;   
​
}
​

你可能感兴趣的:(数据结构,算法,学习,c++,笔记)