1 条题解
-
3赵青海 (huhe) LV 7 SU @ 2021-8-7 21:01:06
C++ :
#include<iostream> #include<queue> #include<vector> #include<algorithm> using namespace std; const int N=30010; int n,m; //n表示ADD操作次数,m表示get操作次数 int a[N],b[N]; int main() { cin>>n>>m; for(int i=0;i<n;i++)cin>>a[i]; for(int j=0;j<m;j++)cin>>b[j]; sort(b,b+m); priority_queue<int> left; priority_queue<int,vector<int>,greater<int>> right; /*题解思想:通过维护大顶堆、小顶堆,完成这个模拟操作操作*/ //b[m]数组暗含了add(x)和get两个操作 int i=0,j=0; //枚举操作确定索引变量 //程序设计 while(i<n || j<m) //设计:一步一步操作 { while(j<m && b[j]==i) { //get操作 在i个元素情况下,get的操作。 cout<<right.top()<<endl; left.push(right.top()); right.pop(); j++; } //add操作分两种情况 int x=a[i]; if(left.empty()||x>=right.top()) right.push(x); else { left.push(x); right.push(left.top()); left.pop(); } i++;//i表示数组a的索引号 } return 0; }
- 1
信息
- ID
- 73
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 50
- 已通过
- 40
- 上传者