题意:中文题面,十分清晰

思路:很明显的主席树操作,查询区间某数的出现次数,但是更新的时候操作比较秀。

我们把xix_ixi​和xi+1x_{i+1}xi+1​进行交换,我们这样操作,先把a[xi]a[x_i]a[xi​]和a[xi+1]a[x_{i+1}]a[xi+1​],然后只需要改root[x]和root[x-1]即可,因为我们是在x-1的基础上更改这样不仅可更新x+1带来的影响同时还能把之前的x值给覆盖掉。可以完美AC,要不会被卡好像。

代码:

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int MAXN = 3e5 + 7;
int a[MAXN],n,m,root[MAXN],size,b[MAXN],num,vis[MAXN];struct Tree{int l,r,sum;
}tree[MAXN*40];void modify(int &now,int pre,int l,int r,int p,int val){tree[now = ++size] = tree[pre];tree[now].sum += val;if(l == r) return ;int mid = (l+r)>>1;if(p <= mid) modify(tree[now].l,tree[pre].l,l,mid,p,val);else modify(tree[now].r,tree[pre].r,mid+1,r,p,val);
}int query(int now,int pre,int l,int r,int p){if(l == r) return tree[now].sum - tree[pre].sum;//注意是两个版本的差值int mid = (l+r)>>1;if(p <= mid) return query(tree[now].l,tree[pre].l,l,mid,p);else return query(tree[now].r,tree[pre].r,mid+1,r,p);
}int getid(int x){ return lower_bound(b+1,b+1+num,x)-b; }int main(){scanf("%d%d",&n,&m);for(int i = 1;i <= n;i ++) scanf("%d",&a[i]),b[i] = a[i];sort(b+1,b+1+n);num = unique(b+1,b+1+n)-b-1;for(int i = 1;i <= n;i ++){int tmp = a[i];a[i] = getid(a[i]);modify(root[i],root[i-1],1,num,a[i],1);vis[tmp] = a[i];}int op,l,r,x;while(m--){scanf("%d",&op);if(op == 1){scanf("%d%d%d",&l,&r,&x);if(!vis[x]) { printf("0\n");continue; }else printf("%d\n",query(root[r],root[l-1],1,num,vis[x]));}else{scanf("%d",&x);if(a[x] == a[x+1]) continue;swap(a[x],a[x+1]);modify(root[x],root[x-1],1,num,a[x],1);}}return 0;
}

P3939数颜色 (主席树)相关推荐

  1. P3939 数颜色 (权值线段树)

    题目链接: P3939 数颜色 大致题意 略 解题思路 权值线段树 对于这个题, 由于询问的是, 对于c颜色, [l, r]区间有多少该颜色的兔子. 相当于每次询问的就是一种颜色的区间查询. 假设颜色 ...

  2. 洛谷P3939 数颜色 vector乱搞

    洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...

  3. P4587-[FJOI2016]神秘数【主席树】

    正题 题目链接:https://www.luogu.com.cn/problem/P4587 题目大意 nnn个数,每次选择一个区间,然后询问这个区间的子集和所不能表示的最小的正整数. 解题思路 假设 ...

  4. 【代码源 Div1 - 108】#464. 数数(主席树,区间比k小的数的个数)HDU4417

    problem solution 主席树查询区间比k小的数的个数 建树之后直接在目标区间的主席树内将 H 作为挡板递归计数. #include<bits/stdc++.h> using n ...

  5. [BZOJ4408][FJOI2016]神秘数(主席树)

    题目: 我是超链接 题解: 如果[1,x]可以取到,我们加入一个数y,如果y<=x+1,那么我们有新的取数集合[1,x+y]:如果y>x+1,那么x+1还是取不到啊,这样我们就有了一个暴力 ...

  6. [Bzoj4408]神秘数(主席树)

    Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数. 例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = ...

  7. 【bzoj4408】[Fjoi 2016]神秘数 主席树

    题目描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = ...

  8. [四校联考P3] 区间颜色众数 (主席树)

    主席树 Description 给定一个长度为 N 颜色序列A,有M个询问:每次询问一个区间里是否有一种颜色的数量超过了区间的一半,并指出是哪种颜色. Input 输入文件第一行有两个整数:N和C 输 ...

  9. [蓝桥杯][2016年第七届真题]压缩变换(主席树求区间不同数的个数)

    题目描述 小明最近在研究压缩算法. 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比. 然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面 ...

  10. D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)

    English Vietnamese Given a sequence of n numbers a1, a2, -, an and a number of d-queries. A d-query ...

最新文章

  1. aspose.words 表格内容水平居中_CSS十五种方法教你如何居中一个元素
  2. studentname在java中怎么_是教师,还是学生?setName法和string赋值法区别在哪里!!!...
  3. Hulu:如何实现大型比赛直播系统自动扩容
  4. this指向 - 总结
  5. OpenShift 4 - 用Compliance Operator对OpenShift进行安全合规扫描
  6. Azure Synapse Analytics简介第3部分:数据科学和商业智能
  7. condition实现通知部分线程
  8. 红帽子linux改ip命令,Linux系统下图形界面更改IP地址
  9. TSC工业型条码打印机的价格的影响因素有哪些呢?
  10. vue综合实例——音乐播放器(悦听player)
  11. python获取windows窗口的内容_Python实现遍历windows所有窗口并输出窗口标题的方法...
  12. 360n6pro刷鸿蒙系统,360手机N6Pro有没事用win10刷机成功的交流一下心得
  13. 视频大数据与物联网(IoT)融合发展的探索
  14. java之简易生成彩色二维码实践
  15. CodeForces - 272C Dima and Staircase (线段树区间更新)
  16. [蛋蛋无厘头日记]收到礼物喵~o(∩_∩)o
  17. 区块链为化解信任危机带来新契机
  18. ant man什么意思_ant是什么意思_ant翻译_读音_用法_翻译
  19. Matlab 应用GPU加速
  20. 近视眼学计算机好吗6,怎么会加重眼睛的近视,近视加重与6个原因有关

热门文章

  1. arduino 嗡鸣器 音乐_arduino笔记一:用arduino实现蜂鸣器播放音乐
  2. java学习笔记(10) 第10 章(上) - 面向对象编程(高级部分)
  3. Jupyter notebook的主题和字体美化
  4. 大陆资金港股打新股亲身体验全流程
  5. 如何提高服务器并发能力
  6. 小象学院 零基础Python入门 案例四 52周存钱挑战v_3.0
  7. android 获取IP地址
  8. 解决gradle运行gradle -v命令报Fialed to laod library 'native-platform.dll'错误
  9. 手写一个博客平台 ~ 第六天
  10. 想提高棋艺?试试这款围棋AI