当前位置: 首页 > news >正文

【Luogu】P1972 [SDOI2009] HH 的项链 (树状数组求区间内不同数的个数)

P1972 [SDOI2009] HH 的项链 - 洛谷

题目:

思路:

考虑如何维护区间内不同数个个数?

由于反复出现的数只算 1 的奉献,那么我们就只保留最右边的数的奉献。具体的,对于 1 2 1 2 3 这个数组,其权值数组 val 为 0 0 1 1 1,这样的话如果要查询的话我们只需要利用前缀和的方法就能求出来具体的值了

同时既然我们要保留最右边的数,那么对于查询我们应该也要从小到大查,所以我们将询问按右端点升序排序

对于权值数组,其既有单点修改,又有区间查询,显然我们可以使用树状数组维护

对于具体的更新操作,我们用一个 lst 数据记录某个数字上次出现的位置,如果本次查询的范围内某一个数字之前出现过,那么就要消除这个数字的权值,同时更新 lst,否则直径更新当前位置的权值,同时更新 lst

同时注意到对于一个区间如果我们已经修改完了,那么就不需要再次修改了,所以定义一个左边界 l,其代表我们已经修改到什么地方了,防止多余的修改

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());class Fenw
{
private:int n;vector<int> tree;public:Fenw(int n) : n(n), tree(n + 1, 0) {}int lowbit(int x) { return x & -x; }void update(int x, int k){for (; x <= n; x += lowbit(x))tree[x] += k;}int query(int x){int res = 0;for (; x; x -= lowbit(x))res += tree[x];return res;}
};struct Q
{int l, r, id;bool operator<(const Q &b) const { return r < b.r; }
} q[1000005];
int a[1000005];
int ans[1000005];
int lst[1000005];
void solve()
{int n;cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];Fenw fw(n);int m;cin >> m;for (int i = 1; i <= m; i++){cin >> q[i].l >> q[i].r;q[i].id = i;}sort(q + 1, q + m + 1);for (int i = 1, l = 1; i <= m; i++){for (int j = l; j <= q[i].r; j++){if (lst[a[j]])fw.update(lst[a[j]], -1);fw.update(j, 1);lst[a[j]] = j;}l = q[i].r + 1;ans[q[i].id] = fw.query(q[i].r) - fw.query(q[i].l - 1);}for (int i = 1; i <= m; i++)cout << ans[i] << '\n';
}signed main()
{cin.tie(0)->sync_with_stdio(0);int t = 1;while (t--){solve();}return 0;
}

http://www.dtcms.com/a/496561.html

相关文章:

  • 若依AI平台
  • 宁波网站建设设计制作.net 网站开发架构
  • 制作网站网络科技公司做seo对网站推广有什么作用
  • 软件测试基础知识与面试题总结
  • 河南高端网站建设随机图片网站
  • Orcad capture 元器件位号按顺序重排
  • 外贸行业网站建设公司排名企业集团网站建设
  • 400电话申请网站源码程序做网站公司不给源码
  • CFF Explorer: 一款Windows PE 文件分析的好工具
  • LINUX14 进程间的通信 - 管道
  • 徐州城乡建设局网站金山网站建设公司
  • Java成长之路 | 技术专栏导航页
  • 知识就是力量——mode-red使用qq邮箱
  • 四川网站建设公司 会员登录制作动作游戏吧中文
  • 做网站价格需要多少钱Wordpress页面标签插件
  • YOLO-V3深度学习中的目标检测新高度
  • 找到M3U8直播源的方法
  • html5网站建设平台百度搜索关键词规则
  • 专业做公墓 陵园的网站三合一网站包含什么
  • 深度学习——基于 ResNet18 的图像分类训练
  • 西安公司建一个网站需要多少钱广告设计公司合同
  • Linux:11.线程概念与控制
  • 恋家网邯郸房产网站排名优化服务公司
  • 婚纱网站建设需求分析国外模板wordpress
  • 南阳理工网站建设专项培训网站建设方案
  • 便携气象站具备完整的气象观测能力
  • 杭州倍世康 做网站网站怎样制作 优帮云
  • 一级A视网站 一级做爰片网站建设类有哪些岗位
  • 永兴县网站建设服务商什么是网站设计与运营
  • Google Landmarks Dataset v2 (GLDv2):面向实例级识别与检索的500万图像,200k+类别大规模地标识别基准