hdu3333(线段树离散化离线处理)

hdu 3333 turing tree 解题报告 Hdu 3333解题报告 题意描述: 给你n个数现在要你求在k个区间上[ai, bi]的不相同的数之和各是多少. N<=30,000; k<=100,000; 显然,这题不能用暴力来做。 这题我们选择用线段数来做。 立即下载
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 30005;
int n,m;
ll num[maxn],tmp[maxn];
int vis[maxn],pre[maxn];
ll tree[maxn<<2];
struct node
{
    int l,r,pos;
    bool operator < (const node& T) const
    {
        return r<T.r;
    }
}val[100005];
ll ans[100005];
void update(int pos,ll c,int l,int r,int root)
{
    if(l==r)
    {
        tree[root] = c;
        return ;
    }
    int mid = (l+r)/2;
    if(pos<=mid) update(pos,c,l,mid,root<<1);
    if(pos>mid) update(pos,c,mid+1,r,root<<1|1);
    tree[root] = tree[root<<1] + tree[root<<1|1];
}
ll query(int a,int b,int l,int r,int root)
{
    if(a<=l&&b>=r)
        return tree[root];
    int mid = (l+r)/2;
    ll res = 0;
    if(a<=mid) res+=query(a,b,l,mid,root<<1);
    if(b>mid) res += query(a,b,mid+1,r,root<<1|1);
    return res;
}
int main()
{
    int cases;
    scanf("%d",&cases);
    while(cases--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)scanf("%I64d",&num[i]),tmp[i] = num[i];
        scanf("%d",&m); sort(tmp,tmp+n);
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&val[i].l,&val[i].r);
            val[i].pos = i;
        }
        sort(val,val+m);
        memset(tree,0,sizeof(tree));
        memset(vis,0,sizeof(vis));
        memset(pre,-1,sizeof(pre));
        memset(ans,0,sizeof(ans));
        int j = 0;
        for(int i=0;i<n;i++)
        {
            int t = upper_bound(tmp,tmp+n,num[i])-tmp;
            //printf("s   %d\n",t);
            if(vis[t])
            {
                update(pre[t],0,1,n,1);
                update(i+1,num[i],1,n,1);
                pre[t] = i+1;
            }
            else
            {
                update(i+1,num[i],1,n,1);
                pre[t] = i+1;
                vis[t] = 1;
            }
            for(;j<m;j++)
            {
                if(i+1!=val[j].r) break;
                ans[val[j].pos] = query(val[j].l,val[j].r,1,n,1);
            }
        }
        for(int i=0;i<m;i++)
        {
            printf("%I64d\n",ans[i]);
        }
    }
    return 0;
}

告别全局搜索!7种SRP-PHAT快速算法实战对比:哪个更适合你的麦克风阵列? 本文深入探讨了7种SRP-PHAT改进算法在声源定位领域的实战表现,包括SRC、CFRC、SPF等方案。通过对比计算效率、定位精度和环境鲁棒性等核心指标,为不同场景(如会议室、智能家居、工业机器人)提供算法选型建议,帮助工程师优化麦克风阵列性能。 阅读详情

相关推荐

LSF调度实战:如何用bsub命令实现多队列资源抢占与公平调度

本文深入探讨了LSF作业调度系统的高级实战技巧,重点解析如何通过配置`lsb.queues`文件与灵活运用`bsub -R`命令,构建一套兼顾效率与公平的多队列资源抢占与调度体系。文章详细介绍了队列优先级设计、公平共享机制、资源感知调度以及抢占策略的实施,帮助集群管理员解决高优先级任务等待、资源分配不均等常见问题,实现计算资源的精细化管理和高效利用。

vvv99的博客 218

HDU(3333)树状数组+离线

题目大意:给出一列数字,再给出一些询问,求询问的区间中,不重复的数字的总和。 思路:数据量较大,可考虑使用离线化操作,将答案存起来一并输出。先把询问的区间右端按照从小到大排序,否则查询的时候需要多次更新数组。#include #include #include #include #include #include using namespace std; const int maxn

phantom_kiddo的博客 346

工厂自动化布线实战:从功率计算到线槽布局的完整避坑指南

本文详细介绍了工厂自动化布线的实战经验,从功率计算到线槽布局的完整避坑指南。通过三步计算法确定线径需求,强调电压降控制的重要性,并分享线槽布局的50%法则和强弱电分离技巧。特别针对移动设备和多芯信号线提供专业解决方案,帮助工程师避免常见错误,提升布线效率和质量。

weixin_29266007的博客 352

HDU - 3333 Turing Tree(线段树+离线处理)

题目链接:点击查看 题目大意:给定一个长度为n的数列,依次求m个区间中不相同数字之和 题目分析:n给的是3e4,看到区间问题先要想到线段树或差分区间或动态规划,暴力是肯定不行滴,那么这个题已经知道是需要 用线段树处理了,可是我们只擅长用线段树求区间和,并没有学过求不同数字之和啊,那么该怎么处理重复的数字呢? 这里就要将线段树的两个优势结合起来使用了:单点修改和区间查询 好了,现在来说一下...

Falcon的博客 515

医学图像分割评价指标详解:从Dice到MSD的实战解析

本文深入解析医学图像分割的核心评价指标,从最常用的Dice相似系数到衡量边界精度的MSD(最大对称表面距离),通过实战案例与代码演示,系统阐述各指标的计算原理、应用场景及临床意义,帮助读者全面评估模型性能。

weixin_29070721的博客 593

FPGA发展趋势:异构计算、AI加速、可重构计算

FPGA技术正朝着异构计算、AI加速和可重构计算三大方向发展。作为高效能计算平台,FPGA在异构架构中与CPU/GPU协同工作,发挥低延迟、高能效优势;在AI领域通过定制化架构实现边缘推理加速;其硬件可重构特性支持动态适应多样化计算需求。最新进展包括部分可重构技术、智能网卡和边缘AI应用。未来,FPGA将在自适应计算、量子接口和软件定义硬件等领域持续突破,成为异构计算架构的核心组件,推动硬件与软件的深度融合。性能对比显示FPGA在能效比(5-20TOPS/W)和灵活性方面具有显著优势。

2301_79143213的博客 969

【算法随笔:HDU 3333 Turing tree】(线段树 | 离线 | 离散化 | 贪心)

near[i] < x, 意味着原数组最近一次出现value of a[i]不在该区间[x, y)内,也就意味着a[i]是区间中第一个出现的元素。每个区间可能有重叠,这时需要采用贪心思路和区间合并的思路,对区间左端点排序,依照次序依次处理询问区间。题目很简单,给出长度为N的数组,Q次询问,每次给出区间。枚举每个询问区间[x, y),对于a[i], 如果有。value of a[i]最后出现的下标。只需在更新过程中,同时维护当前时刻,预处理, 记录每个a[i]对应的。last[a[i]]有越界风险。

RFoer的博客 727

Windows10下安装VMware16虚拟机

由于本人系统为Windows 10 家庭中文版,无法安装Linux子系统WSL,虽然网上也有强制安装的方法,但为保险起见,还是把之前的VMware虚拟机重新进行安装,并浅浅记录一下安装过程。

沉香best的博客 863

hdu3333(线段树求不同数字之和)

普通的数组,普通的给区间求和,然而这道题要不同的数字,也就是如果有重复数字不能加入到和中 不能有重复数字那么给线段树中加一个数字,如果有重复的那之前的就要删掉 那么查区间的时候怎么办呢 在新的数字v[n]有效前把前n个数字和(需要查询的)先算出来 所以先给区间们排序,每次查之前构造范围内的线段树 // //  main.cpp //  3333 //

远方传来风铃 574

HINT: High-quality INpainting Transformer with Mask-Aware Encoding and Enhanced Attention 训练自己的数据集

HINT(高质量图像修复变换器)通过创新的掩码感知像素洗牌下采样模块(MPD)和空间激活通道注意力层(SCAL),显著提高了图像修复的质量,尤其在大面积缺失区域的情况下。实验表明,HINT在CelebA、CelebA-HQ、Places2和敦煌数据集上超越了现有的最先进模型,提升了图像的细节和结构一致性。

LJ1147517021的博客 312

小龙虾OpenClaw卸载全攻略,彻底清理缓存和配置,干净无残留!

不想要的小龙虾OpenClaw怎么彻底卸载?🦞本文教你如何彻底的卸载OpenClaw⚡️,Windows/macOS/Linux通用,干净无残留🧹

XiaoqiangClub的博客 313

HDU 3333,SPOJ-DQUERY 线段树+离散化+离线处理

SPOJ-DQUERY 题意是求区间内不同数的个数 HDU 3333是求区间内不同数的和 做法基本上差不多, 先存起区间来,然后按区间右端点由小到大排序 然后遍历每个区间 先依次把序列插入到线段树中(到区间右端点停止),在这个过程中,用book数组记录这个数之前出没出现过 出现过的话book数组记录的是该数的位置,没出现过的话就是0,(HDU这道题数的范围是1e9因此需要离散化,SPOJ不用),如...

青春苦瓜 261

国科大学习资料--人工智能原理与算法-2020年期末考试题解析(学长整理)

国科大学习资料–人工智能原理与算法-2020年期末考试题解析 张文生老师主讲 试卷共有6道题,题目不难,希望大家能取得好的成绩。 3.9 传教士和野人问题。三个传教士和三个野人在河的一岸,有一条能载一个人或者两个人的船。请设法使所有人都渡到河的另一岸,要求在任何地方野人数都不能多于传教士的人数。这个问题在AI领域中很有名,是因为它是第一个从分析的观点探讨问题形式化的论文的主题(Amarel,1968)。 a. 请对该问题进行详细形式化,只描述确保该问题求解所必需的特性。画出完整的状态空间图。 b. 应用合适

无名何许人的博客 4786

HDU 3333 树状数组(线段树) + 离散化 + 离线处理

传送门:HDU 3333题意  给定一个长为n的序列, 做m次查询, 查询结果为区间内只出现一次的数字集合之和 题解 刚开始想的读入时用map映射,如果前面出现过, 线段树之前出现位置结点为0当前点原值, 没出现的话直接原值, 但是发现这样只能查询右端为当前位置左端为1的结点, 所以要先对查询做处理 查询预处理是对查询做r递增排序, 同时要有个idx对应查询下标 所以为了实现全部

退役ACMer 656

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

HDU3333 Turing Tree 线段树+离散化+离线处理

题源:https://vjudge.net/problem/15630/origin 题意:给你一段长度为n的区间,每个点都有一个值,请你算出某个区间内,不同值之和。 思路: 0、先说这题,看了无数题解终于比着敲出来了,但是就是一直WA,一直WA。最后发现各个参数应该用long long 而不是int 我哭。 1、首先是一些小的分析:我们注意到每个数可以很大(1e9),但是数的数量很小(3e4)...

枚举星星 174

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

hdu3333 线段树+离散化+离线处理

线段树+离散化+离线处理

zxf654073270的专栏 962

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

hdu3333 (线段树+离散化+离线处理)

题意是询问区间里不重复数字的和 ,采用离线处理,先对询问区间按右值排序(也可以按左值),并记录输入的顺序,然后进行更新和查询,对每一个要更新的值先判断之前有没有出现过,如果出现过就消除之前的,再更新当前的并记录位置(数据比较大,可以用到离散化), 如果当前更新的和查询的右值相同则查询。注意__int64  #include #include #include #include u

daydream1000的博客 332

HDU 3333 Turing Tree (线段树+离散化+离线处理)

题目链接: https://vjudge.z180.cn/problem/HDU-3333 题目大意:给你长度为N的序列,再给你Q次询问,每次询问给你一个区间[l,r],按询问顺序依次输出序列中区间[l,r]的数的总和(重复值只记录一次)[l,r],按询问顺序依次输出序列中区间[l,r]的数的总和(重复值只记录一次)[l,r],按询问顺序依次输出序列中区间[l,r]的数的总和(重复值只记录一次)(这Q次询问是一次性给出来的,这也是这道题可以离线处理的原因). 分析:这道题如果不要求重复值只记录一次,那么就直

TheWayForDream 228

线段树的一些题和对应的做法

HDU3627:这题主要是线段树加离散化,然后我们只要保存在一个区间内最大的Y值,然后在线更新; HDU3333;这道题是线段树加离线; HDU3911,这道题刚开始见到的时候觉的想法很奇特,主要是要保存6个值,从左边开始连续的0和1,和从右边开始连续的0和1;和在这个区间内连续的1和0 的最多的数量; HDU4366:这道题因为是树形关系。所以我们要先通过一个dfs把他们一一对应到一个数组

woshizhazha的专栏 399

【线段树+离散化+离线方法】杭电 hdu 3333 Turing Tree

/* THE PROGRAM IS MADE BY PYY */ /*----------------------------------------------------------------------------// Copyright (c) 2012 panyanyany All rights reserved. URL : http://acm.hdu....

网站开发初中级代码参考-转载 103

HDU 3333 Turing Tree (离线询问+线段树)

题目地址:HDU 3333 将询问离线保存下来,然后将数组的点离散化,记录每个值上一次出现的位置。然后枚举数组的数,若当前枚举的数前面出现过,那么就删掉前面出现过的那个位置上的数,更新当前这个位置上的数,然后那些所有询问的右端点为当前位置的就可以通过查询来得到结果了。 更新与查询用线段树来优化。 代码如下:#include <iostream> #include <string.h> #inc

scf0920 1162

FJUT 3097(hdu 3333) 区间种类数 线段树+离线

http://120.78.128.11/Problem.jsp?pid=3097 区间种类数 TimeLimit:2500MS  MemoryLimit:128MB 64-bit integer IO format:%lld 已解决 | 点击收藏 Problem Description 给一长度为n的序列,询问其

twh233的算法blog 546

hdu 3333 离线+树状数组

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意: 求一个区间内不重复数字的和,例如1 1 1 3,区间[1,4]的和为4。 分析: 我们考虑每个查询[l,r],现在要求的是这个区间里不通数的和,所以我们在从左扫到右的过程中,可以用一个数据结构保存已经得到的不同的数,到右端点后,然后对区间里不同的数求和,这样就可以得到答案了。

HARD_UNDERSTAND 399

hdu3333[线段树,离散化,离线操作]

Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8457 Accepted Submission(s): 3111 Problem Description After inventing Turing Tr...

ryougi_的博客 167

mo +离散化 HDU3333(听说还有离线线段树的做法 )

http://acm.hdu.edu.cn/showproblem.php?pid=3333 mo套map会T,卡了一个logN,所以要先离散化处理 #define _CRT_SECURE_NO_WARNINGS #include<cmath> #include<iostream> #include<stdio.h> #include&...

Vincent19999999的博客 179

HDU 3333 线段树强制离线处理

http://acm.hdu.edu.cn/showproblem.php?pid=3333 作为一个萌新第一次遇到这种题是很绝望的,大佬的姿势真多!!! 题意:n个数字,m次查询,求每次查询区间数的和(重复的只算一遍) 思路:如果是在线处理要T,只能强制离线(来自大佬的一句话)            1.将m次询问一次性读入,按右端点从小到大排序,如果右端点一样,那左端点

小菜鸟。。 533
上一篇: hdu 5900(区间DP)
下一篇: 51Nod 1445(考建图的最短路)
constbh
博客等级 码龄10年 10粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值