首页 > 其他分享 >查询数字的最邻近

查询数字的最邻近

时间:2022-09-04 21:24:47浏览次数:60  
标签:二分 邻近 靠左 数字 int begin but 查询 区间

 

 

 

 这道题目要用二分+桶排的方式解决

函数:

l~r找v

c:靠左/右(‘l’/‘r’)

靠左和靠右用STL函数二分就行,这里讲一下思路,二分出最靠左/右的v值(but二维,在but[v][0~len]区间二分)再判断是否在区间内在区间内输出but[v][a](a为二分的答案)否则输出-1。

最后再考虑一下需要输出-1的特殊情况(区间内没有v、不合法..........)即可

主函数:

调用函数即可

例程:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
vector<int > but[N];
int n,m;
int e_f(int l,int r,int v,char c)
{
    if(l>r||but[v].size()==0||l<=0||r>n) return -1;
    if(c=='l')
    {
        int a=lower_bound(but[v].begin(),but[v].end(),l)-but[v].begin();
        if(but[v][a]>=l&&but[v][a]<=r) return but[v][a];
        else return -1;
    }
    else if(c=='r')
    {
         int a=upper_bound(but[v].begin(),but[v].end(),r)-but[v].begin();
         a-=1;
         if(but[v][a]>=l&&but[v][a]<=r) return but[v][a];
         else return -1;
    }
}
int main()
{
#ifdef LOCAL
    freopen( "1.in", "r", stdin );
    freopen( "1.out", "w", stdout );
#endif
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        int t;
        scanf("%d",&t);
        but[t].push_back(i);
    }
    while(m--)
    {
        int l,r,v;
        scanf("%d%d%d",&l,&r,&v);
        int a1=e_f(l,r,v,'l');
        int a2=e_f(l,r,v,'r');
        int a3=e_f(1,l-1,v,'r');
        int a4=e_f(r+1,n,v,'l');
        printf("%d %d %d %d\n",a1,a2,a3,a4);        
    }
    return 0;
}

 

标签:二分,邻近,靠左,数字,int,begin,but,查询,区间
From: https://www.cnblogs.com/wjk53233/p/16656123.html

相关文章

  • Oracle根据用户名和表名查询表的字段和字段类型等信息
    1 该用户下所有表的字段筛选方法selecta.column_nameasuploadcolumnfromuser_tab_columnsawherea.DATA_TYPE='VARCHAR2'anda.TABLE_NAME='DCS_MED......
  • 串联数字
    串联数字给定$n$个正整数$a_1,a_2,\dots,a_n$。我们规定将正整数$a_i$和$a_j$串联是指将$a_j$直接接在$a_i$后面构成一个新整数。例如,$12$和$34$串联得......
  • PostgreSQL-查询
    检索过程或从数据库中检索数据的命令称为查询。在SQL中,SELECT命令用于指定查询。SELECT命令的一般语法是:[WITHwith_queries]SELECTselect_listFROMtable_express......
  • 数字图像处理概述
    计算机视觉技术任务:通过对采集的图片或视频进行处理以获得相应场景的相关信息。流程:视频处理以图像处理为基础图像数据最流行的表示方式:数字图像。成像方式不止可......
  • 448. 找到所有数组中消失的数字
     思路难度简单1065收藏分享切换为英文接收动态反馈给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1,n] 内。请你找出所有在 [1,n] 范围内但......
  • 使用媒体查询的响应式菜单 - 教程
    使用媒体查询的响应式菜单-教程HTML在HTML中,我们有标题和菜单。在菜单项中,我们有桌面和移动元素。屏幕大于500px时显示桌面,小于500px时显示手机。在移动类中,我们将......
  • 高级查询
    本篇文章示例介绍的查询操作不同于其他查询操作,它们体现了不同的查询思路,需要以每次一页的方式显示结果集。 1.在结果集中翻页问题:返回员工表中薪水排名前五的......
  • 报告分享|2022年中国制造业数字化转型研究报告
    全文链接:http://tecdat.cn/?p=28398  《2022年中国制造业数字化转型研究报告》立足制造业整体,围绕制造业数字化转型的系列问题进行讨论,试图帮助企业建立对数字化转型的......
  • 报告分享|2022中国财税数字化转型研究报告
    阅读全文:http://tecdat.cn/?p=28389财税助率化利型是个黄杂金距,作为经济其限的重要“配套服务”和“基础发挥”,财税行业正经历典型的,然震撼大,力世界的结构性负化,晕涉多方......
  • Ubuntu下使用apt-get命令查询并安装指定版本的软件
    执行以下命令,查询软件所有的版本号sudoapt-cachemadison<package><package>为需要安装的包名,返回结果第二列即可用的版本号执行以下命令,安装指定版本的软件sudoapt......