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

网站建设方案网站安全php律师网站源码

网站建设方案网站安全,php律师网站源码,剪辑培训班一般学费多少,科技类公司网站怎么设计题意#xff1a;多次询问#xff0c;每次询问某区间的第k小数。 可持久化线段树#xff1a; 掺杂了一点前缀和的思想#xff0c;对于每一个1 ~ i 的区间都建一个树#xff0c;每个节点存的都是一个线段树#xff0c;值存的是当前区间中初始数组按大小排序后[l, r]之间的… 题意多次询问每次询问某区间的第k小数。 可持久化线段树 掺杂了一点前缀和的思想对于每一个1 ~ i 的区间都建一个树每个节点存的都是一个线段树值存的是当前区间中初始数组按大小排序后[l, r]之间的数的个数这个lr指的是每个节点的左右端点。如果想求[l, r]区间内的第k小数只需要同时遍历[1l - 1] 以及 [1, r] 两个版本的线段树因为即使版本不同线段树的结构是不变的所以可以发现如果某个节点区间在老版本里面已经出现了x个数那么在新版本中的当前区间需要减去x这样才是我们所求的区间里面数的数量通过查找第k个数的位置找到第k小的数是哪个。 有点乱直接看代码吧。 using namespace std; typedef long long ll; typedef pairint, int pii; typedef pairint, string pis; const int mod 1e9 7; const int N 2e6 10; int dx[] {-1, 0, 1, 0, -1, 1, 1, -1}; int dy[] {0, 1, 0, -1, 1, 1, -1, -1}; int n, m, idx; int o[N], root[N]; struct node{int l, r;int cnt; }tr[N]; vectorint nums;int find(int x){//找到对应的离散值return lower_bound(nums.begin(), nums.end(), x) - nums.begin(); }int build(int l, int r){// 建树int p idx;// 给当前节点分配序号if(l r) return p;// 区间不可再分直接返回当前节点序号即可int mid l r 1; // 找到区间的中点tr[p].l build(l, mid), tr[p].r build(mid 1, r);// 分别对左右儿子进行建树return p;// 将当前树的序号返回 }int insert(int p, int l, int r, int x){// 插入某个元素p为上一个版本的当前区间的树序号int q idx;// 为当前子树分配序号tr[q] tr[p]; // 继承老版本中当前子树的信息if(l r) {// 需要修改的就是当前位置将cnt加一即可tr[q].cnt ;return q;}int mid l r 1;if(x mid) tr[q].l insert(tr[p].l, l, mid, x);// 需要插入得位置在左儿子else tr[q].r insert(tr[p].r, mid 1, r, x);// 在右儿子tr[q].cnt tr[tr[q].l].cnt tr[tr[q].r].cnt; // 更新当前版本的当前区间的cnt状态return q;//返回当前的序号 }int query(int q, int p, int l, int r, int k){// 查询lr区间的第k小数q为当前版本p为老版本if(l r) return r; // 找到所查元素int cnt tr[tr[q].l].cnt - tr[tr[p].l].cnt;// 通过新老版本的差可以得出当前区间的真实数量int mid l r 1;if(k cnt) return query(tr[q].l, tr[p].l, l, mid, k);// 再左儿子查左儿子更新新老版本的左儿子树的序号else return query(tr[q].r, tr[p].r, mid 1, r, k - cnt);// 更新右儿子树的序号以及新的k的状态 }inline void sovle() {cin n m;for(int i 1; i n; i ){cin o[i];nums.push_back(o[i]);}sort(nums.begin(), nums.end());nums.erase(unique(nums.begin(), nums.end()), nums.end());//以上都是在进行离散化操作root[0] build(0, nums.size() - 1);// 建立一个空的线段树用于下一次操作继承哨兵作用for(int i 1; i n; i ) // 没差一次就建立一个新版本的树root[i] insert(root[i - 1], 0, nums.size() - 1, find(o[i]));while(m --){int l, r, k;cin l r k;int i query(root[r], root[l - 1], 0, nums.size() - 1, k);//查询操作cout nums[i] endl; } }signed main(void) {IOS;int t 1; // cin t;while(t --) sovle();return 0; }
http://www.pierceye.com/news/293921/

相关文章:

  • 做二手房需要用到哪些网站搜集房源找人做设计的网站
  • 建设银行河北分行招聘网站可以下载新闻视频的网站
  • 凡客官网旗舰店襄阳seo关键词优化公司
  • 区域门户网站源码健身网站建设
  • 动漫网站建设赚钱吗三端互通传奇手游开服列表
  • 网站建设前的需求分析手机免费制作网站模板免费下载
  • 网站兼容ie7接私活做网站要不要签合同
  • 广州网站建设首选快优wordpress拖拽建站
  • 网站开发 播放音频amr个人网站设计案例
  • 建设一个网站可以采用那几方案常用的网页制作工具有什么
  • 摄影看图网站河南省交通工程造价信息网
  • 网站架构发展历程的思考和心得体会软件开发网站开发培训
  • 陕西天工建设有限公司网站长安网站建设哪家好
  • 东莞网站的建设重庆妇科医院哪家好医院公立医院
  • 北京用网站模板建站wordpress中文 插件下载
  • 做网站公司哪家正规重庆网站建设重庆
  • 网站转备案申请学校网站建设申请书
  • 宜昌网站建设选择宜昌慧享互动线上店免费推广的软件
  • 网站建设主流语言织梦网站流动广告代码
  • 南京做网站公司哪个网站上做ppt比较好看的
  • 在服务器上搭建网站中国建设银行淮南分行网站
  • 网站建设什么服务器品牌哪个好南京企业制作网站
  • 太原有哪些做网站的公司如何伪原创 网站
  • 设计好的网站网站策划方案详解
  • 建网站潞城哪家强?企业网络推广技巧
  • 怎么建设网站让国外看wordpress 公司内网
  • 虚拟主机购买网站网站值不值得做seo
  • 长沙网站排名优化如何在网站做电子杂志
  • 石家庄科技网站在线解压zip网站
  • 不良网站举报中心官网做网站必须买云虚拟主机吗