首页 > 其他分享 >D. Find the Different Ones!

D. Find the Different Ones!

时间:2024-02-09 22:00:12浏览次数:21  
标签:Different int cin 2e5 Ones th Find

前言

拿到题目首先看数据量,n,q都是2e5的数量级,如果是暴力解的话时间复杂度会达到O(m*n)(最差情况 m次询问,每次l和r为1和n),很明显会超时。

这就意味着我们要在线性的时间内完成查询,即每次询问的查询时间保证在O(1)。

题解

准备一个数组b存储该连续相同数字串的起始点,然后我们从左向右遍历数组,对于第i-th的元素我们判断它与i-1 th的元素是否相等,相等b[i]=b[i-1],不相等b[i]=i。

那么我们只需要比较左右边界的b[i]值判断他们是否属于同一串数字串。

Code

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N],b[N];
int main(){
    ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while (t--){
        memset(b,0,sizeof(b));
        int n,q;
        cin>>n;
        for (int i=1;i<=n;i++){
            cin>>a[i];
            if (a[i]!=a[i-1]) b[i]=i;
            else b[i]=b[i-1];
        }
        cin>>q;
        for (int i=1;i<=q;i++){
            int l,r;
            cin>>l>>r;
            if (b[r]==b[l]) cout<<"-1 -1\n";
            else cout<<b[r]-1<<" "<<r<<"\n";
        }
        cout<<endl;
    }
    return 0;
}

 

标签:Different,int,cin,2e5,Ones,th,Find
From: https://www.cnblogs.com/purple123/p/18012640

相关文章

  • C. Choose the Different Ones!
    题解我们只需要遍历1~k,这时会有四种情况:1、只存于a数组中。2、只存于b数组中。3、同时存于ab数组中。4、不存在于ab数组中。对于情况三,这种数我们不需要去管,因为它可以算在任意的数组上。那么我们只需要判断情况一和二的数是否都<=k/2,并且情况一二三的数总和为k.Code ......
  • D. Find the Different Ones!
    原题链接核心\(p[i]\)代表离\(a[i]\)最近的不同元素code#include<bits/stdc++.h>usingnamespacestd;inta[200005]={0};intp[200005]={0};intmain(){intt;cin>>t;while(t--){intn;cin>>n;for(inti=1......
  • 153. Find Minimum in Rotated Sorted Array
    题目Supposeanarraysortedinascendingorderisrotatedatsomepivotunknowntoyoubeforehand.(i.e., [0,1,2,4,5,6,7] mightbecome [4,5,6,7,0,1,2]).Findtheminelement.Youmayassumenoduplicateexistsinthearray.Example1:Input:[3,4,5,1,2]O......
  • CF1408F Two Different 题解
    解题思路先考虑如何将一堆数变为相同的。显然,这里有一个条件\(n=2^k,k\in\mathbbZ\),证明如下:每次操作只能将两个数变为相同的,那么一个数在使得其他数变为相同数的操作中(我们不妨将所有数进行这种操作称为一轮操作),一个数最多被使用一次;按照错位操作,即第一轮\(1\)和\(2\)......
  • Find The MultipleC++
    这题就是找N的倍数m,M要求是由1和0组成且非0。可以用图来看,从1出发临边是1和0,然后广度遍历,第一个能能整除N的数输出就行。#include<iostream>#include<queue>usingnamespacestd;intmain(){intn=-1;while(cin>>n){if(n==0)break;longlon......
  • fatal: couldn't find remote ref master 问题解决!
    这个错误信息通常出现在使用Git命令尝试从远程仓库克隆、拉取(pull)或推送(push)时,指定的分支(在这个案例中是master)在远程仓库中不存在。这种情况可能由以下几个原因导致:1.分支名称错误远程仓库中不存在名为master的分支:随着Git和GitHub的更新,master分支被重新命名为main......
  • find命令
    当前目录搜索所有文件,文件内容包含“140.206.111.111”的内容find.-typef-name"*"|xargsgrep"140.206.111.111"列出当前目录及子目录下所有文件和文件夹find.在/home目录下查找以.txt结尾的文件名find/home-name"*.txt"同上,但忽略大小写fin......
  • 比较以下Unity AStar Pathfinding, NavMesh, Recast Navigation 寻路算法的优点与缺点
    一、AStarPathfindingAStarPathfinding是一种基于图搜索的寻路算法,它使用启发式搜索来找到最短路径。AStarPathfinding的优点包括:高效性:AStarPathfinding是一种高效的寻路算法,因为它使用启发式搜索来找到最短路径,可以大大减少搜索空间,从而提高寻路速度。灵活性:AStarPathf......
  • 【渗透工具】一款自动化分析网络安全应急响应工具--FindAll
    简介这款工具的推出将极大地提升蓝队应对网络安全事件的能力,不仅有助于提高响应效率,还能够降低工作复杂性。通过提供全面的信息搜集和高效的威胁分析,我们可以帮助蓝队成员在复杂的网络环境中保持优势,但应急响应是一个十分复杂的工作此工具只能帮助蓝队人员收集部分信息,如有异常发......
  • 达梦---自定义函数 find_in_set()
    createorreplaceFUNCTIONFIND_IN_SET(piv_str1varchar2,piv_str2varchar2,p_sepvarchar2:=',')RETURNNUMBERISl_idxnumber:=0;--用于计算piv_str2中分隔符的位置strvarchar2(500);--根据分隔符截取的子字符串piv_......