HDU4006

题目要求:

       给你一个数列,两种命令,第一种:加入一个值,第二个命令:求出第k大的值。

 反思:

   这道题一直RunTime Error,最后才发现当要加入的位置是最后一位时,则待插入的位置,已经出了 vector 的界限了,故要加入判定。

以后遇问题多从不同的角度去思考,不断思考,不然就换题。


#include <iostream>
#include <cstdio>
#include <cmath>
#include<vector>
#include <cstdlib>
#include <cstring>
#include <algorithm>

using namespace std;

const int inf=0x3f3f3f3f;
int coun=0;

int main()
{
    int n,k;
    while(cin>>n>>k)
    {
        vector<long long>vec(1000100);
        vec.resize(0);
        for(int i=0; i<n; ++i)
        {
           long long val;
            char m;
            cin>>m;
            if(m=='I')
            {
                scanf("%lld",&val);
                int l=0,r=coun-1;
                coun++;
                while(l<=r)
                {
                      int mid=(l+r)>>1;
                      if(vec[mid]<val)
                      {
                          r=mid-1;
                      }
                       else
                       {
                            l=mid+1;
                       }
                }
                if(l<0)
                    l=0;
                if(l<=vec.size()-1)
                   vec.insert(vec.begin()+l,val);
                else
                   vec.push_back(val);
            }
            if(m=='Q')
            {
                printf("%lld\n",vec[k-1]);
            }
        }
    }

    return 0;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值