正题


题目大意

给出一个有序集合AAA,定义Al,rA_{l,r}Al,r​表示集合内l∼rl\sim rl∼r这个范围内的数。

定义加法A+BA+BA+B表示两个集合中的所有元素(不去重)。

现在询问,每次询问ki,pik_i,p_iki​,pi​然后给出kik_iki​个区间[lj,rj][l_j,r_j][lj​,rj​]
求∑j=1kiAlj,rj\sum_{j=1}^{k_i} A_{l_j,r_j}j=1∑ki​​Alj​,rj​​
这个集合中第pip_ipi​小的数。


解题思路

因为k≤5k\leq 5k≤5所以我们可以考虑一般的主席树求区间第kkk小。

现在对于每个询问的lj,rjl_j,r_jlj​,rj​我们让kkk组下标同时在主席数上跑动。那么每次的数字个数即是kkk组下标计算出来的数字的和。然后往左或往右区间走动是让555组区间同时走动即可。


codecodecode

#include<cstdio>
#include<algorithm>
#define MN 201000
using namespace std;
struct tnode{int w,l,r,ls,rs;
}t[MN<<5];
int n,m,x,y,k,a[MN],b[MN],root[MN],q,w,r[6],l[6],qnum,cnt;
int build(int l,int r)
{int k=++cnt;t[k].l=l,t[k].r=r;if (l==r) return k;int mid=(l+r)>>1;t[k].ls=build(l,mid);t[k].rs=build(mid+1,r);return k;
}
int addt(int k,int z)
{int nb=++cnt;t[nb]=t[k];t[nb].w++;if (t[k].l==z&&t[k].r==z) return nb;int mid=(t[k].l+t[k].r)>>1;if (z<=mid) t[nb].ls=addt(t[k].ls,z);else t[nb].rs=addt(t[k].rs,z);return nb;
}
int query(int k)
{if (t[r[1]].l==t[r[1]].r) return t[r[1]].l;int num=0;for(int i=1;i<=qnum;i++)num+=t[t[r[i]].ls].w-t[t[l[i]].ls].w;if(k<=num){for(int i=1;i<=qnum;i++)r[i]=t[r[i]].ls,l[i]=t[l[i]].ls;return query(k);}else{for(int i=1;i<=qnum;i++)r[i]=t[r[i]].rs,l[i]=t[l[i]].rs;return query(k-num);}
}
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);int q=unique(b+1,b+1+n)-b-1;root[0]=build(1,q);for (int i=1;i<=n;i++){int te=lower_bound(b+1,b+1+q,a[i])-b;root[i]=addt(root[i-1],te);}for (int i=1;i<=m;i++){scanf("%d%d",&qnum,&k);for(int j=1;j<=qnum;j++)scanf("%d%d",&l[j],&r[j]),l[j]=root[l[j]-1],r[j]=root[r[j]];printf("%d\n",b[query(k)]);}
}

jzoj3379-查询【主席树】相关推荐

  1. 静态主席树总结(静态区间的k大)

    静态主席树总结(静态区间的k大) 首先我们先来看一道题 给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入格式: 第一行包含两个正整数N.M,分别表示序列的长度和查询的个数. ...

  2. hdu 2665(主席树查询区间k大值)

    先贴我自己写的代码做模板虽然跟原博主没什么两样.(一开始空间开的4*maxn,交到hdu上一直TLE很奇怪) #include<bits/stdc++.h> using namespace ...

  3. trie树上值域化建主席树 查询异或平移最小值 ---- P3293 [SCOI2016]美味

    题目大意: 解题思路: 首先我们知道区间查询异或最小值肯定是在trie是匹配 而且如果没有(aj+xi)(aj+xi)(aj+xi)就是一个可持久化Trie树上面的裸题了 但是很不幸有 怎么办呢? 首 ...

  4. 【无码专区10】第K大查询(双向链表 /主席树+st表)

    已自我实现,但还是归入无码专区序列.哈哈哈哈哈 对于my idea部分,我的每一个想法都实现了,可供参考. problem 给定一个 1∼n1\sim n1∼n 的排列和 kkk,求所有 r−l+1≥ ...

  5. 【HDU - 4417】Super Mario(查询区间小于K的数的个数,主席树)

    题干: Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded ...

  6. P3168 [CQOI2015]任务查询系统 差分+主席树

    链接在这~:https://www.luogu.org/problem/P3168 主席静态区间修改,单点查询 区间(L,R)加1可以通过差分以后转换为L位置加1,R+1位置减1 我们只需要记录一下, ...

  7. 洛谷 P3302 [SDOI2013]森林 主席树+启发式合并

    click here~:https://www.luogu.org/problem/P3302 emmm这个题是真的烦 一看题发现这题不是count on a tree的升级版么 如果一点思路没有的话 ...

  8. LuoguP2617 Dynamic Rankings (动态主席树学习理解)

    题目地址 题目链接 题解 动态主席树的板子题.动态主席树其实和静态的有很大差别,虽然同样是n个根,但是节点并不能共用,每个根节点表示bit上的一段区间. 所以其实是个树套树的东西来着,外层是bit,内 ...

  9. 可持久化线段树(主席树)【舰娘系列】【自编题】

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=60083619 向大(hei)佬(e)势力学(di ...

  10. [湖南集训]更为厉害 树上主席树-以树深度为下下标建立主席树

    题意题解: 首先对于树上某个点a来说,假设点b是a的祖先(也就是在a的上面),那么答案很好计算,也就是min(k,dep[a]−1)∗(size[a]−1)min(k,dep[a]-1)*(size[ ...

最新文章

  1. OpenStack Heat模板详解
  2. winscp 服务器拒绝了SFTP连接,但它监听FTP连接。 想要用FTP协议来代替SFTP吗?最好是用加密的。
  3. C#调用百度地图 api
  4. Apache Camel:基于企业集成模式(EIP)的开源集成框架
  5. FedML联邦机器学习框架正式开源,助力算法开发和性能比较
  6. leetcode1039. 多边形三角剖分的最低得分(动态规划)
  7. hashcat 基本使用
  8. Laravel最佳实践--API请求频率限制(Throttle中间件)
  9. ubuntu 16.04安装mysql_Ubuntu 16.04 安装mysql 5.7.16
  10. gcc编译出现dlopen、dlerror、dlsym、dlcolse的解决方法
  11. php网上商城拟解决的问题是,上次说的软件商城BUG,已找到问题,并解决~
  12. Burp Suite Scanner Module - 扫描模块
  13. Android Studio查看MD5与SHA1
  14. 计算机学院毕业设计任务书,计算机专业毕业设计任务书.doc
  15. 【计算机网络】“三次握手”通俗解释
  16. 为什么量子计算机是锥形,科学家制作超高精度微腔为量子计算机铺垫
  17. Android读书笔记(一)
  18. Python学好兼职无忧,接单兼职平台曝光,除了主业,副业也能让你月入过万
  19. android开发网站的流程图,Android_客户端开发流程图及案例.pdf
  20. 《java从入门到放弃》_《Java从入门到放弃》JavaSE入门篇:JDBC(入门版)

热门文章

  1. java main 声明_Java中main方面面试题
  2. python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...
  3. mysql流程控制_Mysql之流程控制结构
  4. 服务器机房 维护,服务器机房建设与管理维护.pdf
  5. python将列表的第一列删除_python列表基本操作:索引(访问),切片,扩展,删除,追加,统计,长度,获取下标等...
  6. 上海市二级c语言软件环境,上海市计算机二级C语言复习资料 word整理版.doc
  7. C++ class实现顺序队列(完整代码)
  8. 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)
  9. JAVA JDBC连接mysql编程
  10. 蜘蛛牌 HDU - 1584(搜索——达到先让某些段先结合,达最优解)