codeforces 700D 哈夫曼树 莫队

CodeForces - 935A Fafa and his Company [带修改莫队] 阅读详情

题意:给一个长度为n的数列a,q组询问,每组询问求将li到ri的区间中的数哈夫曼编码的长度。

莫队,对于每一个询问处理该区间内出现次数为x的字符个数。
对于次数小于n√ 的字符,从小到大枚举出现次数,对于一种出现次数x两两配对,在x∗2 插入x的个数/2。
对于出现次数大于n√ 的字符,用构建哈夫曼树的方法处理。

时间复杂度O(nn√logn)

能过。。。。

#include <bits/stdc++.h>
using namespace std;
#define N 110000
int  n,q,size;
vector<int>st;
int a[N],cnt[N],num[N],c[N],ans[N],num1[N];
struct node
{
    int l,r,bel;
    friend bool operator < (const node &r1,const node &r2)
    {
        if(r1.l/size==r2.l/size)return r1.r<r2.r;
        return r1.l<r2.l;
    };
}b[N];
void update(int x,int v)
{
    num[c[x]]--;
    c[x]+=v;
    num[c[x]]++;
}
int cal()
{
    int pre=0,ret=0;
    priority_queue<int,vector<int>,greater<int> >que;
    for(int i=0;i<st.size();i++)
        if(c[st[i]]>size)que.push(c[st[i]]);
    for(int i=1;i<=size;i++)num1[i]=num[i];
    for(int i=1;i<=size;i++)
        if(num1[i])
        {
            if(pre)
            {
                num1[i]--;
                if(pre+i>size)que.push(pre+i);
                else num1[pre+i]++;
                ret+=pre+i;pre=0;
            }
            if(num1[i]&1)
                num1[i]--,pre=i;
            ret+=num1[i]*i;
            if(i*2>size)
                for(int j=1;j<=num1[i]/2;j++)que.push(i*2);
            else num1[i*2]+=num1[i]/2;
        }
    if(pre)que.push(pre);
    while(que.size()>1)
    {
        int r1=que.top();que.pop();
        int r2=que.top();que.pop();
        que.push(r1+r2);ret+=r1+r2;
    }
    return ret;
}
int main()
{
    //freopen("tt.in","r",stdin);
    scanf("%d",&n);
    size=sqrt(n)+1;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        cnt[a[i]]++;
        if(cnt[a[i]]==size)
            st.push_back(a[i]);
    }
    scanf("%d",&q);
    for(int i=1;i<=q;i++)
    {
        scanf("%d%d",&b[i].l,&b[i].r);
        b[i].bel=i;
    }
    sort(b+1,b+1+q);
    int r=0,l=1;
    for(int i=1;i<=q;i++)
    {
        while(l<b[i].l)update(a[l],-1),l++;
        while(l>b[i].l)l--,update(a[l],1);
        while(r<b[i].r)r++,update(a[r],1);
        while(r>b[i].r)update(a[r],-1),r--;
        ans[b[i].bel]=cal();
    }
    for(int i=1;i<=q;i++)
        printf("%d\n",ans[i]);
    return 0;
}
有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图) 本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。 阅读详情

相关推荐

nRF5340双核实战:从Zephyr环境搭建到蓝牙协议栈部署

本文详细介绍了nRF5340双核处理器的开发实践,包括Zephyr环境搭建、蓝牙协议栈部署及双核协同工作配置。通过实战案例展示了如何利用nRF5340的双核异构架构提升蓝牙应用性能,并提供了调试技巧与资源优化建议,帮助开发者高效实现低功耗蓝牙设备开发。

weixin_42525385的博客 380

CodeForces - 1000F One Occurrence(莫队+分块 | 线段树 | 主席树)

F. One Occurrence time limit per test 3 seconds memory limit per test 768 megabytes input standard input output standard output You are given an array aa consisting of nn integers, and qq que...

LP_Cong 861

手把手教你逆向抖店滑块验证码:从抓包到生成captchaBody的完整流程(附Python复现代码)

本文详细解析了抖店滑块验证码的逆向过程,从抓包分析到参数生成,最终用Python完整复现验证流程。涵盖关键接口分析、指纹参数生成、轨迹加密逻辑及核心加密算法实现,帮助开发者突破抖店的多重安全机制,实现高效的人机验证绕过。

weixin_30681121的博客 424

Codeforces 633H. Fibonacci-ish II (Mo's Algorithm(莫队算法) + 线段树 + 离散化)

题意: 给定一个长度最大为3万的序列,和最多3万个询问,每个询问问某区间[L,R]里的数,去掉重复然后排序之后,依次乘上斐波那契数列然后求和,结果对m取余的值。 区间优化用Mo's Algorithm(莫队算法),莫队算法的Add和Remove中使用线段树,所以整体复杂度是O(n*sqrt(n)*log2(n)). 这题一路TLE,从TLE26到TLE27到TLE29到TLE35都快绝

岩之痕 3136

HTPA 32x32d热成像传感器数据读取与校准全流程解析

本文详细解析了HTPA 32x32d热成像传感器的数据读取与校准全流程。从寄存器配置、原始数据采集,到核心的五大校准步骤(包括热量、电子偏移、电压、灵敏度补偿及温度转换),并涵盖像素重组、坏点修复及图像后处理,为开发者替代或升级MLX90640提供了完整、实用的操作指南。

weixin_29190169的博客 611

Pointnet++环境配置+复现

深度学习点云经典网络Pointnet++

weixin_58663121的博客 8075

Codeforces 765F Souvenirs - 莫队算法 - 链表 - 线段树

题目传送门   神速的列车   光速的列车   声速的列车 题目大意   给定一个长度为$n$的序列,$m$次询问区间$[l, r]$内相差最小的两个数的差的绝对值。 Solution 1 Mo's Algorithm & Linked List   不会。。果断莫队(orz mcfx,一讲“值域”链表就明白可以干什么了)。   当插入一个数的时候,如...

adx33526的博客 298

LT8711/LT8712 Type-C转HDMI设计方案|替代LT8711/LT8712芯片|GSV2201可完全替代兼容LT8711/LT8712

LT8711UX是一款高性能C/DP1.2型至HDMI2.0转换器,用于将USB Type-C源或DP1.2源连接到HDMI2.0接收器。该LT8711UX集成了一个DP1.2兼容的接收器,和一个HDMI2.0兼容的发射器。此外,还包括两个CC控制器,用于CC通信,以实现DP Alt模式和功率传输功能,一个用于上游Type-C端口和另一个用于下游端口。

weixin_63518914的博客 1639

Problem - 220B - Codeforces(莫队)

Problem - 220B - Codeforces 题目大意:给定长度为n的数组,m次查询,求每次查询的区间中,aia_iai​=num[ai]num[a_i]num[ai​]的个数. 解题思路:n的范围是1e5,基本就确定了这是一个莫队的题. 莫队用来处理离线问题,通过把长度为nnn的数组分块成n\sqrt{n}n​块来进行处理,处理之前进行一个排序,对于起点,用所在块来决定先后顺序,对于处在相同块的,用n来决定先后顺序. 复杂度的证明:对于右指针的每一块而言,它一定是单调递增的去移动,那么复杂

qq_53629286的博客 342

ubuntu20.04开机黑屏卡在/dev/sda1:clean,***files,***blocks,解决心得记录

这个问题如果你百度,会发现目前有很多种解决方法。 有更新显卡驱动的,有卸载上一次安装软件的,还有各种奇奇怪怪的故障原因。 如果你是属于上述情况,那么按照百度和论坛的各种指引操作一般都能解决。 但我这里主要说一种特殊情况,就是我什么也没有操作,我什么也没干。就是正常使用系统关了机突然就报错了。 这也是自己亲自遇到的问题,做个小记录方便以后自己回顾。 上一次出现这种情况我重装系统了,这次用了两个月又出现了,重装成本太高,我接受不了,于是找到解决办法。 首先找个终端进入,进入终端的方法很多,用安装u盘

qq_41517017的博客 2万+

手把手教你用Logisim搭建5级流水MIPS CPU(附华中科技计组实验避坑指南)

本文详细介绍了如何使用Logisim从零构建5级流水MIPS CPU,特别针对华中科技大学计算机组成原理实验提供实用指南。内容涵盖单周期CPU过渡、流水线寄存器设计、数据冒险处理等核心环节,并附有实验避坑建议和性能优化技巧,帮助学生高效完成这一挑战性项目。

weixin_42532938的博客 372

莫队算法

莫队算法,是由莫涛队长提出的,能够以玄学的复杂度处理区间查询类的问题。也可以说,他使用来解决线段树等数据结构不好维护的区间查询问题。

christ_lrs的博客 3807

AI 代码赋能短视频带货:服装及多赛道批量内容生产全流程实操

本文聚焦 AI 技术在短视频带货领域的落地应用,以服装赛道为核心,延伸至花卉绿植、图书、茶具等热门领域,系统拆解 AI 工具在选品、素材处理、视频制作(含动态效果、场景搭建)、运营优化等环节的实操方法。针对从业者普遍面临的 “内容生产低效”“无专业技术难出优质视频”“流量运营踩坑” 等痛点,提供从基础工具使用到高阶视频制作的全流程技术方案,助力相关从业者借助 AI 实现批量、高效的短视频内容产出。

m0_67958922的博客 3083

[ 莫队 哈夫曼树 ] Codeforces700D Huffman Coding on Segment

莫队。每次询问不断将值小于 n−−√n\sqrt n 的合并,剩下的用构建哈夫曼树的方法来做就可以了。 #include&lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; const int N=100010; struct Node{ int l,r,id; }c[N]; int k,n,m,S,L=1,R;...

gjghfd 323

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块

【题目】D. Huffman Coding on Segment 【题意】给定n个数字,m次询问区间[l,r]的数字的哈夫曼编码总长。1<=n,m,ai<=10^5。 【算法】哈夫曼树+莫队+分块 【哈夫曼树】哈夫曼树又称最优构造树,n个数字的哈夫曼树是含有n个给定权值叶子的点权路径和最小的二叉树。 点权路径和(WPL)可以表示为每个点的深度*权值。 构造方法:每次取点权最小...

weixin_33762321的博客 162

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Codeforces 700D Huffman Coding on Segment 莫队算法+哈夫曼树

题意 给一个长度为n的序列,每次询问把一个区间内的数转换成哈夫曼编码需要的最小长度。哈夫曼编码就是把每个字符映射到一个01串,要求对于两个不同的字符,其中一个的编码不能是另一个的前缀。 n,ai,q≤100000n,ai,q≤100000n,a_i,q\le100000 分析 显然我们可以把每个字符出现的次数看作是权值,然后建一棵哈夫曼树的代价即为答案。 用莫队维护每个数的出现次数,...

beginend 444

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Codeforces700D】Huffman Coding on Segment

题意: 给你nn个数,问区间[l,r][l,r]中的数用二进制哈夫曼编码编码后的最短长度。我撕烤了大概很久线段树怎么维护。然后一看题解告诉我是莫队!(wtf??) 按出现次数分为大于n√\sqrt n和小于等于n√\sqrt n的。小于等于的从小到大无脑合并,如果合出了大于n√\sqrt n的就和原来的大于n√\sqrt n的一起加入一个优先队列,最后处理完后挑小的两个合并就好啦。 时间复杂度

wzf_2000的博客 537

Codeforces 700D Huffman Coding on Segment 莫队算法

D. Huffman Coding on Segment time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Alice wants to send an importa

J. Cole 592

ng-zorro-antd Pagination 分页组件完整指南:从基础用法到源码级原理解析

> 分页器(Pagination)是 ng-zorro-antd 中用于分隔长列表、按页加载数据的导航组件。本文以官方文档为骨架,结合仓库源码与官方演示,系统讲解 `<nz-pagination>` 的全部 API、典型使用场景、模板自定义技巧,并深入分析页码生成算法、尺寸切换与快速跳转的底层实现,帮助你从"会用"进阶到"懂原理"。 ## 一、何时使用分页 在 Ant Design 的设计体系

gitblog_00863的博客 770

Codeforces Round #340 (Div. 2) E - XOR and Favorite Number (莫队算法)

题意:给你n个数,m个查询,每个查询问你一个区间里面,连续的数的异或值恰好为k的区间有多少个思路:莫队算法 如果我处理出前缀的异或,那么我ai^aj(i>j)的值,就是 aj+1{a_{j+1}} ^aj+1{a_{j+1}}^aj+3...aia_{j+3}...a_{i}的值。当我修改区间的时间,多一个值aia_{i},那么就相当于之前区间的答案加上cnt[k^aia_{i}],其他的也相似,

Roll_Keyboard的博客 356

codeforces86D 莫队算法

题目大意:给你n个数,m次询问,Ks为区间内s的数目,求区间[L,R]之间所有Ks*Ks*s的和。1 思路:直接用莫队算法,前面的博文讲过原理。这里再说一下增加和删除操作。因为要求Ks*Ks*s,所以每次增加一个需要在原有结果上加(Ks*Ks*x - (Ks-1)*(Ks-1)*x),删除的话也是要相应的减去。 莫队算法还是很好用的。 #include #include #include

风一样的自由,色彩斑斓的雨季 978

CodeForces - 617E(莫队)

开数组的时候少开了一个一个位置,wa很难过。#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;algorithm&gt; #include&lt;cstring&gt; #include&lt;cmath&gt; #include&lt;vector&gt; #include&lt;queue&gt; #define ls 2*

blaze_jack 347

codeforces86D Powerful array (莫队算法)

题目链接:点击打开链接 题意:给定一个数组,每次询问一个区间[l,r],设cnt[i]为数字i在该区间内的出现次数,求该区间内所有的cnt[i]^2*i。 思路:区间离线不修改只查询问题,用莫队算法。 代码:   #include&lt;iostream&gt; #include&lt;algorithm&gt; #include&lt;cstdio&gt; #include&lt;c...

常胜将军的博客 268

主席树 | 莫队 ---- Codeforces Round #716 (Div. 2) D. Cut and Stick [主席树or莫队优化] 区间众数问题(静态)

题目链接 题目大意: 就是给你nnn个数,和q次询问,每次询问给你一个区间[l,r][l,r][l,r],问你把区间里面的数分配成最少多少块,使得块内出现最多次数的数不超过区间长度的一半(除不尽向上取整) 解题思路: 假设一个区间的众数是xxx个,那么不是众数的个数为rx=(r−l+1)−x;rx=(r-l+1)-x;rx=(r−l+1)−x; 1.如果区间的众数没超过一半,那么我们直接划分成一个区间就好了 因为如果众数都没超过一半,那么其他数那铁都超不了一半。 2.如果这个区间的众数超过了一半,那么我

weixin_45630722的博客 625

Codeforces 617E ( 莫队算法 Mo's algorithm )

原文链接:http://blog.anudeep2011.com/mos-algorithm/本文是参考了上文的链接并做了很大改动。这个算法在Codeforces Div.1的C或D中比较常见。本文将从按以下几个步骤来了解Mo’s algorithm: 引出一个问题 用一个简单的方法以O(n^2) 来解决这个问题 轻微修改上面的算法,它仍然运行在O(N ^ 2) 解释该算法来解决以上问题 CF 6

我要加油了,因为我还有很多NB的梦想! 1568

离线区间的神奇——莫队算法

离线区间神奇——莫队算法前言一、什么是莫队算法?二、例题分析:1.相关例题题目描述输入格式输出格式简单分析:三、莫队算法思想:那么要怎么做(预处理):莫队算法优化的核心是**分块和排序**举个例子:求给定区间内不重复数的个数时间复杂度简单分析莫队算法JAVA代码实现四、总结 前言 莫队算法是由莫涛提出的算法。在莫涛提出莫队算法之前,莫队算法已经在 Codeforces 的高手圈里小范围流传,但是莫涛是第一个对莫队算法进行详细归纳总结的人。 一、什么是莫队算法? 莫队算法是一种基于分块思想的优化暴力算法.

deren_x的博客 1499
上一篇: codeforces 702F 可持久化平衡树
下一篇: codeforces 700E 后缀数组
make_it_for_good
博客等级 码龄11年 13粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值