CF790 div4 F(双指针) H(逆序对)

news2024/11/15 21:36:34

乐,被div4薄纱了

没想到把所有出现次数>=k的数放一个数组里然后双指针

还有H,连逆序对都没看出来,嘻

感觉以后还是写写div4算了,写什么div2啊,caibi

Problem - F - Codeforces

题意:

给定一个数列,长度为n,有一个数k,问使得值域在[l,r]的数中在数列中出现次数>=k的最大的r-l+1是多少

思路:

首先这个数列和顺序无关,所以可以把它看成集合,这道题多半要用到哈希,因此先用map统计出每个数的出现次数

因为要求在值域中的最大区间,所以考虑在哈希表里面做双指针

但是值域上限是1e9,无论是时间还是空间都不支持

但是我们注意到有一句话:

所以复杂度和n有关系

所以应该想到把所有出现次数>=k的数放在一个数组里,然后双指针去找最大连续区间长度就好了

感觉双指针有两种写法,一种是尺取法,另一种就是这道题的while(1)写法

Code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define low(x) (x&(-x))
const int mxn=2e5+10,mxe=2e5+10;
int n,k;
void solve(){
    cin>>n>>k;
    map<int,int> mp;
    vector<int> v;
    vector<int> a(n+10);
    for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]++;
    for(auto it:mp){
        if(it.second>=k) v.push_back(it.first);
    }
    if(v.empty()){
        cout<<-1<<'\n';
        return;
    }
    sort(v.begin(),v.end());
    int l=0,r=0,sz=v.size(),ans=-1,ansl,ansr;
    while(1){
        if(l>sz-1||r>sz-1) break;
        while(r<=sz-1&&v[r]-v[l]==r-l) r++;
        if(ans<r-1-l+1){
            ans=r-1-l+1;
            ansl=v[l];
            ansr=v[r-1];
        }
        l=r;
        r++;
    }
    if(ans<v[r-1]-v[l]) ansl=v[l],ansr=v[r-1];
    cout<<ansl<<" "<<ansr<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;cin>>__;
    while(__--)solve();return 0;
}

然后是H

Problem - H2 - Codeforces

题意:感觉不如直接放出来,看图比较直观

一眼逆序对了,但是我没看出来,嘻

用树状数组维护就好了

Code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define low(x) (x&(-x))
const int mxn=2e5+10,mxe=2e5+10;
int n;
int a[mxn];
struct BIT{
    int bitree[mxe];
    void init(){
        for(int i=0;i<=n;i++) bitree[i]=0;
    }
    int sum(int x){
        int res=0;
        for(int i=x;i;i-=low(i)) res+=bitree[i];
        return res;
    }
    void insert(int pos,int x){
        for(int i=pos;i<=n;i+=low(i)) bitree[i]+=x;
    }
};
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    reverse(a+1,a+1+n);
    BIT tr;
    tr.init();
    int ans=0;
    for(int i=1;i<=n;i++){
        ans+=tr.sum(a[i]);
        tr.insert(a[i],1ll);
    }
    cout<<ans<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;cin>>__;
    while(__--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023万象更新!smardaten企业级无代码新版本也来啦!

2022可以说是在反复的做核酸、查绿码中度过的&#xff0c;不曾想年终一个月还是躲不过“小阳人”的命运。而这一个月&#xff0c;研发部的“阳过”们依旧加班加点给我们带来了最新版本——V8R4C70。在2022-2023跨年之际&#xff0c;smardaten这次又有哪些新的变化呢&#xff0c…

MVC三层架构的模式

大家好&#xff0c;今天给大家分享一下MVC 三层架构的模式 首先你要知道&#xff0c;所谓的MVC就是一种面向于javaee企业级开发的设计模式 这里要强调一点,MVC 不是一种技术&#xff0c;不是一种像spring 那样的框架&#xff0c;它是一种思想&#xff08;可以理解为一种解决问…

【GNSS算法工程入门】1. Git入门

写在前面笔者在GNSS算法开发岗位从业过一段时间&#xff0c;和大部分同学类似&#xff0c;在GNSS开发过程中&#xff0c;也是从工程化的小白逐渐成长起来。而在算法开发从业的过程中&#xff0c;发现有些基础的知识其实在学校学习过程中是相对缺失的。麻省理工有个课程叫计算机…

编译型语言的Docker镜像构建小技巧

最近公司需要将一个底层服务打包成docker镜像&#xff0c;作为征战docker一年的小白当然不能错过这次练手的好机会。简单介绍一下这个项目&#xff1a;该项目为一个纯restful风格的后端项目&#xff0c;后端由java开发、worker节点由python开发、管理员使用的命令行工具由rust开…

wpa_supplicant EAP状态机分析

EAP状态机分析RFC4137协议状态机设计原理模块划分SM状态定义SM状态转换SM使用到的变量及函数定义变量1.SM与LL交互使用到的变量列表2.SM与EM交互使用到的变量3.SM内部使用的变量函数wpas代码RFC4137协议 RFC4137&#xff1a;“State Machine for Extensible Authentication Pr…

强化学习笔记-01多臂老虎机问题

本文是博主对《Reinforcement Learning- An introduction》的阅读笔记&#xff0c;不涉及内容的翻译&#xff0c;主要为个人的理解和思考。 1. 多臂老虎机问题 多臂老虎机问题是指存在K个老虎机&#xff0c;每个老虎机的获胜金额是一个未知的概率分布且相互独立&#xff0c;假设…

一文解决Opencv四大经典算子——sobel算子、scharr算子、laplacian算子、canny算子

Opencv四大算子 Sobel算子Scharr算子laplacian算子canny算子总结边缘是像素值发生跃迁的位置,是图像的显著特征之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用! Sobel算子 sobel算子对图像求一阶导数。一阶导数越大,说明像素在该方向的变化越大,边缘信号越…

python链接池和pymysql批量入库——从0实现大规模异步爬虫框架项目4

我将这个链接池和批量入库封装了一个工具类上传了pypi,可以直接import使用 使用也较为简单&#xff0c;导入PooledDBhelper的DBhelper&#xff0c;调用DBhelper.PooledDBhelper()方法传入数据库链接信息创建一个链接池即可 pip install PooledDBhelper1.0.0 -----------------…

虚析构函数的作用

类的析构函数是为了释放内存资源&#xff0c;析构函数不被调用的话就会造成内存泄漏。虚析构函数定义为虚析构函数是为了当用一个基类的指针删除一个派生类的对象时&#xff0c;派生类的析构函数会被调用。但并不是要把所有类的析构函数都写成虚函数。只有当一个类被用来作为基…

信息论复习—卷积码

目录 卷积码的基本概念&#xff1a; 卷积码与分组码的不同特点&#xff1a; 卷积码的构造与表示方法&#xff1a; 卷积码编码器的结构&#xff1a; 卷积码(3,1,3): 卷积码的卷积关系: 卷积码的生成矩阵: 卷积码的多项式: 系统码结构的卷积码: 卷积码的监督矩阵: 卷积…

Pipenv使用指南:轻量级虚拟环境管理工具详解

前言 终于能够挤出一点时间来总结最近学到的一些技术知识点了&#xff0c;博主这两周被居家隔离-集中隔离-居家隔离来回折腾&#xff0c;现在终于是得到解放能够空出的时间来写写博客了&#xff0c;但是项目又催的紧&#xff0c;写博文的时间还是有限&#xff0c;这周我会尽量…

正则语言的性质

正则语言的性质 一、正则语言的性质 1.正则语言的泵引理 设LLL是正则语言&#xff0c;则存在与LLL相关的常数nnn满足&#xff1a;对于任何LLL中的串www&#xff0c;如果∣w∣≥n|w|\geq n∣w∣≥n&#xff0c;则我们就能把www打断为三个串wxyzwxyzwxyz使得&#xff1a; y̸ϵ…

2011年专业408

文章目录0 结果1 题目2 思路2.1 思路1&#xff08;暴力解&#xff1a;排序&#xff09;2.2 思路2&#xff08;较优解&#xff1a;归并合并数组&#xff09;2.3 思路3&#xff08;较优解&#xff1a;数组指针后移&#xff09;2.4 思路4&#xff08;最优解&#xff1a;两个数组的…

ARM BTI指令介绍

目录 一、JOP 二、BTI 三、启用BTI 四、BTI是怎么实现的 一、JOP JOP&#xff08;Jump-oriented programming&#xff09;类似于ROP&#xff08;Return-Oriented Programming&#xff09;。在 ROP 攻击中&#xff0c;会扫描出useful gadgets&#xff08;易被攻击的一段代码…

【数据结构】顺序队列的原理及实现

1.什么是队列 队列是一种比较特殊的线性表&#xff0c;特殊就在于它只允许在表的前端来进行删除&#xff0c;在表的后端来进行插入&#xff0c;队列它是一种操作受限制的线性表。插入的一端称为队尾&#xff0c;删除的一端称为队头&#xff0c;队列里没有元素就称它为空队列。…

快速使用代码编辑工具vim+ctags+cscope快捷使用itop3568开发板

当以上配置全部完成后&#xff0c;每当拿到新的工程代码&#xff0c;进入相关代码目录&#xff0c;利用 vim ./命令打 开当前目录&#xff0c; 然后 crtl 生成插件所需文件&#xff0c;最后使用命令:qa!退出 vim。此步只需进行一 次。 在此目录中打开任意代码文件或任意子目录…

jdk8新特性-日期时间

1、介绍 日期时间类在Java开发中是必不可少的&#xff0c;前后端如何传递时间参数、数据库的时间在Java中对应什么类型、Java中时间转换的各种方式有哪些&#xff1f; 2、Date类 Date类是JDK1.0时期推出来的第一代时间类&#xff0c;位于java.util包下&#xff0c;是最常用的…

unctf easy_serialize反序列化字符逃逸

&#xfeff;ctf题目平台&#xff1a;UNCTF - HACKING 4 FUN。web题难度适中 easy_serialize 题目源码&#xff1a; <?php include "function.php"; $action $_POST[action]; $name $_POST[name]; $pass $_POST[pass]; $email $_POST[email]; ​ function …

南京小米java面经(一面)

目录1.java支持多继承吗2.线程的生命周期3.线程和进程的区别4.单例模式有几种5.写一下双重锁的单例6.jvm有哪些区域7.jvm哪些区域是线程共享的&#xff0c;哪些是线程私有的8.gc中判断对象可回收的方式有哪些9.gc垃圾回收算法有哪些10.哪些对象可以作为gc root11.gc中的引用计数…

软件设计师教程(四)程序设计语言基础知识

软件设计师教程 软件设计师教程&#xff08;一&#xff09;计算机系统知识-计算机系统基础知识 软件设计师教程&#xff08;二&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;三&#xff09;计算机系统知识-计算机体系结构 程序设计语言知识软件设计师…