博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客练习赛52 B:Galahad(树状数组维护区间不同元素和(个数))
阅读量:3899 次
发布时间:2019-05-23

本文共 629 字,大约阅读时间需要 2 分钟。

【题目】

查询区间和,如果区间元素重复出现则计数一次。

【题解】

按区间的右端点建立树状数组,维护区间[1,R]的每个元素的最右位置。按查询区间的右端点排序,依次处理,每次更新当前值的最右位置即可。

若要查询区间不同元素个数,把

for(;it<=q[i].R;it++){            if(vis[a[it]]) //这个数之前出现过                add(vis[a[it]],-a[it]); //取消标记            vis[a[it]]=it; //记录最大位置            add(it,a[it]); //添加新标记        }

改为如下代码即可

for(;it<=q[i].R;it++){            if(vis[a[it]]) //这个数之前出现过                add(vis[a[it]],-1); //取消标记            vis[a[it]]=it; //记录最大位置            add(it,1); //添加新标记        }

【代码】

#include
using namespace std;const int maxn=5e5+10;typedef long long ll;struct p{ int L,R,num;}q[maxn];int cmp(p a,p b){return a.R

 

转载地址:http://dhfen.baihongyu.com/

你可能感兴趣的文章
WebKit之HTMLConstructionSite类组成
查看>>
Linux之so加载原理分析
查看>>
C之基于signal信号的交互式的测试功能模块(触发时机)
查看>>
Linux之libevent的编译&测试
查看>>
Linux之kc.cfg文件参数详解
查看>>
MySql之简单SQL用法整理
查看>>
PHP之thinkphp的数据库操作代码段汇总
查看>>
Linux之tcpdump用法汇总整理
查看>>
Linux之tcp的结构分析
查看>>
WebKit之WebSocket模块的代码层初步分析
查看>>
WIFI之Agent调度关系
查看>>
WIFI之升级协议列表
查看>>
MCU之STM32可用硬件(外部接口)一览表
查看>>
MySql之设备管理的数据表设计列表
查看>>
WIFI之系统启动的脚本配置
查看>>
Python之服务器模块设计学习
查看>>
WIFI之3GControl模块调度草图
查看>>
WIFI之系统部署环境
查看>>
C++之UML关系说明图
查看>>
网络之Snmp的学习总结
查看>>