vector基本操作:
v.push_back():在vector末尾插入一个数据。
v.insert():在vector中插入一个元素。
v.erase():在vector中删除一个元素。
lower_bound():返回大于或等于目标值的第一个位置。
upper_bound():返回大于目标值的第一个位置。
因为每次插入后排序时间代价太大,则插入采用lower_bound()或者upper_bound()来二分大于等于该数的数的指针,使得每次插入完都是已经排好序。直接输出当前容器内第(size()-1)/2项即可(vector是从第0项开始存储的)。原题解链接:题解 P1168 【中位数】 - deco 的博客 - 洛谷博客 (luogu.com.cn)
代码如下:
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int>a;
int main()
{
cin>>n;
for(int i=1,x;i<=n;i++)
{
scanf("%d",&x);
a.insert(upper_bound(a.begin(),a.end(),x),x);//二分插入保证单调性
if(i%2==1)
{
printf("%d\n",a[(i-1)/2]);//是奇数个就输出
}
}
return 0;
}