1 条题解
- 
  3
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
 - 标签
 - 递交数
 - 58
 - 已通过
 - 48
 - 上传者