1035. 二哥炒股票
Posted bernieloveslife
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
说明
对于每个询问,都有 r≤1000
,询问指令数量不超过 10 条
所有股价都不超过 105
40%的数据 3≤N
70%的数据 3≤N
100%的数据 3≤N
#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]<<"\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;
}
以上是关于1035. 二哥炒股票的主要内容,如果未能解决你的问题,请参考以下文章