zoukankan      html  css  js  c++  java
  • 喵哈哈村的排队

    http://qscoj.cn/problem/17/

    描述

    有一堆喵哈哈村的村民们在排队,他们从队列的尾部开始标号,标号为1的村民站在最后面,标号为n的村民站在队列的最前面,而且每个村民都拥有一个智商值a[i]。

    这些村民有时候会觉得不开心,因为他们觉得凭什么一个智商比他低的人,可以站在他的前面!现在对于每个村民,他们都想知道,在他前面,智商比他低,离他最远的距离是多少。

    第一行n,表示有n只咸鱼
    第二行n个整数,表示每个村民的智商值a[i].
    n<=200000 1<=a[i]<=1000000000

    对于每个村民,输出智商比他的,且离他最远的距离是多少,如果没有输出-1

                       
    6
    10 8 5 3 50 45
    2 1 0 -1 0 -1

          用容器来解题,在容器中,有一个好用的搜索算法lower_bound=(rbegin,rend,x)-rbegin;在规定的首元素与末尾元素之间查找第一个大于等于x的元素的位置,若没有则返回rend;
    ps:upper_bound用法与之相反。

    #include<iostream>
    #include<cstring>
    #include<vector>
    #include<cstdio>
    using namespace std;
    const int mod=2e5+5;
    long long a[mod],b[mod],i,k;
    int main()
    {
        long long n;
        while(cin>>n)
        {
            vector<int>v;
            vector<int>m;
            for(i=0;i<n;i++)
            {
                cin>>a[i];
            }
            for(i=n-1;i>=0;i--)
            {
                if(!v.size() || v.back()>=a[i])
                {
                    b[i]=-1;
                    v.push_back(a[i]);
                    m.push_back(i);
                }
                else{
                    k=(lower_bound(v.rbegin(),v.rend(),a[i])-v.rbegin());
                    k=v.size()-k-1;
                    b[i]= m[k+1]-i-1;
                }
            }
            for(i=0;i<n;i++)
            {
                if(i) cout<<' ';
                cout<<b[i];
            }
            cout<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    Linux下使用mtr做路由图进行网络分析
    PHP使用AJAX返回登录成功信息完整参考代码
    ajax提交表单数据不跳转
    帝国cms常用变量总结
    2020软件工程作业04
    2020软件工程作业03
    疑问
    2020软件工程02
    疑问
    2020软件工程作业01
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/6510738.html
Copyright © 2011-2022 走看看