题目链接: P3939 数颜色

大致题意

解题思路

权值线段树

对于这个题, 由于询问的是, 对于c颜色, [l, r]区间有多少该颜色的兔子. 相当于每次询问的就是一种颜色的区间查询.

假设颜色只有一种, 那么我们直接写个线段树维护信息就可以了. 考虑到有多种颜色, 所以我们可以对于每种颜色建立一棵线段树, 树中维护当前颜色的区间信息.

考虑到数据是比较离散的, 我们可以采用动态开点的方式维护信息.

AC代码

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 1; i <= (n); ++i)
using namespace std;
typedef long long ll;
const int N = 3E5 + 10;
int w[N];
struct node {int l, r;int val;
}t[N << 6];
int root[N], ind;
void modify(int a, int c, int tl, int tr, int& x) {if (!x) x = ++ind;t[x].val += c;if (tl == tr) return;int mid = tl + tr >> 1;if (a <= mid) modify(a, c, tl, mid, t[x].l);else modify(a, c, mid + 1, tr, t[x].r);
}
int ask(int l, int r, int tl, int tr, int x) {if (l <= tl and r >= tr) return t[x].val;int mid = tl + tr >> 1;int res = 0;if (l <= mid) res += ask(l, r, tl, mid, t[x].l);if (r > mid) res += ask(l, r, mid + 1, tr, t[x].r);return res;
}
int main()
{int n, m; cin >> n >> m;rep(i, n) {scanf("%d", &w[i]);modify(i, 1, 1, n, root[w[i]]);}rep(i, m) {int tp; scanf("%d", &tp);if (tp == 1) {int l, r, c; scanf("%d %d %d", &l, &r, &c);printf("%d\n", ask(l, r, 1, n, root[c]));}else {int a; scanf("%d", &a);modify(a, -1, 1, n, root[w[a]]);modify(a + 1, -1, 1, n, root[w[a + 1]]);modify(a, 1, 1, n, root[w[a + 1]]);modify(a + 1, 1, 1, n, root[w[a]]);swap(w[a], w[a + 1]);}}return 0;
}

END

P3939 数颜色 (权值线段树)相关推荐

  1. 【bzoj2770】YY的Treap 权值线段树

    题目描述 志向远大的YY小朋友在学完快速排序之后决定学习平衡树,左思右想再加上SY的教唆,YY决定学习Treap.友爱教教父SY如砍瓜切菜般教会了YY小朋友Treap(一种平衡树,通过对每个节点随机分 ...

  2. 树套树 ----- P1975 [国家集训队]排队(树状数组套权值线段树求动态逆序对)

    解题思路: 首先我们知道交换两个数a[l]和a[r]a[l]和a[r]a[l]和a[r]影响到的区间是[l+1,r−1][l+1,r-1][l+1,r−1] 对于a[l]a[l]a[l],我们要减去[ ...

  3. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大

    题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax​为yyy 解题思路: 首先我们知道权值线段树是 ...

  4. HDU-5249 KPI(STL or 权值线段树)

    题目链接 Problem Description 你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度.数十亿的请求被推到一个大管道后同时服务从管头拉取请求.让我们来定义每个请 ...

  5. 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)

    之前刷了一点主席树的题目,但是没有系统的做过权值线段树的题目.主席树是多根权值线段树的综合.权值线段树可以解决在总区间里求第k大的问题.在普通的线段树里,我们每一个节点维护的是权值大小.但是在权值线段 ...

  6. HDU1394(权值线段树)

    HDU1394(权值线段树) 题意: 给定一个0到n-1的数字组成的序列,可以将序列进行左移任意次,求所能组成序列的逆序对的最小值 题解: 利用权值线段树,我们先求出当前序列所能组成的逆序对, 然后依 ...

  7. Zju2112 Dynamic Rankings(树状数组套可持久化权值线段树)

    Zju2112 Dynamic Rankings description solution code description 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须 ...

  8. 【bzoj4399】魔法少女LJJ 并查集+权值线段树合并

    题目描述 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了 LJJ感叹道"这里真是个迷人的绿色世界,空气清新.淡雅,到处散发着醉 ...

  9. 【HDU - 5489】Removed Interval(离散化,权值线段树,思维,最长上升子序列)

    题干: Given a sequence of numbers A=a1,a2,-,aNA=a1,a2,-,aN, a subsequence b1,b2,-,bkb1,b2,-,bk of AA i ...

最新文章

  1. iPhone销售增长50%,净利润增长93%,但苹果股价还是跌了
  2. 测序数据的处理方法及装置制造方法及图纸
  3. socket.io.js的disconnect事件
  4. Mysql手动增加一列_Blog of Grow_百度空间
  5. python爬虫机器人价格_Python
  6. Echarts地图坐标geoCoordMap数据动态获取
  7. c语言函数大全 chm,【oeasy丨c语言丨函数】C语言库函数使用大全CHM版
  8. 大数据集群搭建之Linux的安装(一)
  9. 计算与推断思维 三、Python 编程
  10. restTemplate配置及使用
  11. phalcon:model 事件与事件管理器
  12. “猿式浪漫”:Java小白也能写出的表白程序
  13. Android NDK开发之旅12 JNI JNI引用
  14. 计算机课件白板培训,交互式电子白板的使用培训(1)(2)ppt课件
  15. 百度开放平台-快递物流解决方案
  16. [可解释机器学习]Task07:LIME、shap代码实战
  17. url data 模式(url scheme data)
  18. springboot Filed to bind properties under
  19. 第十一届蓝桥杯省赛第一场原题
  20. Android 系统截屏实现

热门文章

  1. 高效团队都在用的目标管理工具——飞项
  2. Python数据分析入门教程(更新中)
  3. 我的世界java海边种子_我的世界:超稀有种子推荐,开局海边别墅+村庄,这个地图我爱了...
  4. html(标题加上图片的方法,笔记)
  5. 7z SFX Builder v2.3.1 7Z自解压生成器中文版
  6. 干支纪年法简便算法_初中阶段常用的四种历史纪年法
  7. 矩阵求和及Kadane算法
  8. WIN10管理员权限设置、更改用户名被“拒绝访问”
  9. 关于串口通信SBUF寄存器随笔:
  10. 外网如何访问内网/局域网网站【内网穿透】