• 1035. 二哥炒股票


    Description

    二哥最近关注了 N 支股票,编号为 1 至 N 。他不断记录下这 N 支股票的股价变动情况。在此期间,他也想知道其中股价第 i 高的是哪支。你能为他快速回答这这样的问题吗?

    Input Format

    第一行一个整数 N

    第二行 N 个整数,第 i 个数表示编号为 i 的股票的初始股价

    第三行一个整数 K

    接下来 K 行,每行为一条股价变动记录或一条询问:

    M x y 表示编号为 x 的股票的股价变成了 y。

    Q r a1 a2 ... ar 表示二哥依次询问第 a1 大,第 a2 大...第 ar 大的股票编号为多少。若有不同股票的股价相同,那么令编号小的股票更大。

    Output Format

    对于每个询问,输出一行 r 个整数,第 i 个整数表示股价第 ai 大的股票编号为多少。这些整数之间用一个空格隔开。

    Sample Input

    6
    1 2 3 4 5 6
    5
    Q 3 1 3 5
    M 1 7
    Q 3 1 3 5
    M 2 5
    Q 3 1 3 5
    

    Sample Output

    6 4 2
    1 5 3
    1 2 4
    

    说明

    对于每个询问,都有 r1000

    ,询问指令数量不超过 10 条

    所有股价都不超过 105

    40%的数据 3N,K100

    70%的数据 3N,K5000

    100%的数据 3N,K20000

     
    
        #include <iostream>
        #include <stdio.h>
        #include <algorithm>
    
        using namespace std;
    
        void MAX_HEAPIFY(int A[], int data[], int n, int i){
            int l = 2*i+1;
            int r = 2*i+2;
            int largest = -1;
            if(l<n && data[A[l]]>data[A[i]]){
                largest = l;
            }else if(l<n && data[A[l]] == data[A[i]]){
                if(A[l]<A[i])
                    largest = l;
                else
                    largest = i;
            }else{
                largest = i;
            }
            if(r<n && data[A[r]]>data[A[largest]])
                largest = r;
            else if(r<n && data[A[r]]==data[A[largest]]){
                if(A[r]<A[largest])
                    largest = r;
            }
            if(largest!=i){
                int temp = A[i];
                A[i] = A[largest];
                A[largest] = temp;
                MAX_HEAPIFY(A, data, n, largest);
            }
        }
    
        void BUILD_MAX_HEAP(int A[], int data[], int n){
            for(int i = n/2-1;i>=0;i--){
                MAX_HEAPIFY(A,data,n,i);
            }
        }
    
        void HEAPSORT(int query[], int data[], int n, int r){
            int A[n];
            for(int i = 0;i<n;i++)
                A[i] = i;
            BUILD_MAX_HEAP(A,data,n);
    
            int x = *max_element(query,query+r);
            int res[x];
            for(int i=0;i<x;i++){
                res[i] = A[0];
                n--;
                A[0] = A[n];
                MAX_HEAPIFY(A,data,n,0);
            }
            for(int y = 0; y<r; y++){
                cout<<res[query[y]-1]+1<<" ";
            }
            cout<<endl;
        }
    
        int main() {
            int n;
            cin>>n;
            int stock[n];
            for(int i=0;i<n;i++){
                scanf("%d",&stock[i]);
            }
    //        for(int t = 0;t<n;t++)
    //            cout<<stock[t]<<"	";
    
            int k;
            cin>>k;
            while(k-->0){
                char op;
                cin>>op;
                if(op=='Q'){
                    int r;
                    cin>>r;
                    int query[r];
                    for(int i = 0;i<r;i++){
                        int temp;
                        cin>>temp;
                        query[i] = temp;
                    }
                    HEAPSORT(query,stock,n,r);
                }else{
                    int a,b;
                    cin>>a>>b;
                    stock[a-1] = b;
                }
            }
    
            return 0;
        }
  • 相关阅读:
    vue中的watch
    css渲染层次理解及实际问题
    css中一些设计总结
    python打包文件(nuitka)
    vue实现前后端文件的上传和下载
    pyqt5使用多线程避免程序假死
    使用python编写shell脚本并运行
    记录一下WordNet多线程下的bug
    利用多线程对大数组进行处理
    nginx配置静态文件
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/7966909.html
Copyright © 2020-2023  润新知