思路:二分枚举区间第k大。用划分树查找是否符合要求的高度。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#define Maxn 100010
#define lson(x) x<<1
#define rson(x) x<<1|1
#define mid ((tree[po].l+tree[po].r)>>1)
using namespace std;
int val[20][Maxn],toLeft[20][Maxn],sorted[Maxn];
struct Tree{int l,r;
}tree[Maxn*4];
void BuildTree(int l,int r,int dep,int po)
{tree[po].l=l,tree[po].r=r;if(l==r)return ;int same=mid-l+1,i;for(i=l;i<=r;i++)if(val[dep][i]<sorted[mid])same--;int lpos=l,rpos=mid+1;for(i=l;i<=r;i++){if(i==l)toLeft[dep][i]=0;elsetoLeft[dep][i]=toLeft[dep][i-1];if(val[dep][i]<sorted[mid])toLeft[dep][i]++,val[dep+1][lpos++]=val[dep][i];elseif(val[dep][i]>sorted[mid])val[dep+1][rpos++]=val[dep][i];elseif(same)toLeft[dep][i]++,val[dep+1][lpos++]=val[dep][i],same--;elseval[dep+1][rpos++]=val[dep][i];}BuildTree(l,mid,dep+1,lson(po));BuildTree(mid+1,r,dep+1,rson(po));
}
int query(int l,int r,int k,int dep,int po)
{if(l==r)return val[dep][l];int vd,invd;if(l==tree[po].l){vd=toLeft[dep][r];invd=0;}else{vd=toLeft[dep][r]-toLeft[dep][l-1];invd=toLeft[dep][l-1];}if(vd>=k){int newl=invd+tree[po].l;int newr=invd+vd+tree[po].l-1;return query(newl,newr,k,dep+1,lson(po));}else{int ss=l-tree[po].l-invd;int s=r-l+1-vd;int newl=mid+ss+1;int newr=mid+ss+s;return query(newl,newr,k-vd,dep+1,rson(po));}
}
int solve(int s,int t,int x)
{int i,j,l,r,Mid;l=0,r=t-s+1;while(l+1<r){Mid=(l+r)>>1;int temp=query(s,t,Mid,0,1);if(temp>x)r=Mid-1;elsel=Mid;}if(r>=1)if(query(s,t,r,0,1)<=x)return r;return l;
}
int main()
{int n,m,i,j,l,r,Case=0,t,x;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(i=1;i<=n;i++){scanf("%d",&val[0][i]);sorted[i]=val[0][i];}sort(sorted+1,sorted+1+n);BuildTree(1,n,0,1);printf("Case %d:\n",++Case);for(i=1;i<=m;i++){scanf("%d%d%d",&l,&r,&x);l++,r++;printf("%d\n",solve(l,r,x));}}return 0;
}

转载于:https://www.cnblogs.com/wangfang20/p/3248418.html

hdu 4417 划分树相关推荐

  1. hdu 4417(线段树OR树状数组)

    题意:输入一个长度为n的序列,然后m个询问,询问区间[a,b]中比h小的数的个数. 思路:树状数组或线段树离线处理. 树状数组1 View Code 1 #include<cstdio> ...

  2. 【划分树+二分】HDU 4417 Super Mario

    第一次 耍划分树.. . 模板是找第k小的 #include <stdio.h> #include <string.h> #include <stdlib.h> # ...

  3. HDU 4417 Super Mario(划分树)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  4. hdu 3473 Minimum Sum 划分树

    http://acm.hdu.edu.cn/showproblem.php?pid=3473 对于xl,xl+1--xr,使得[xi-x]和最小,显然x应当为其中的中位数.中位数可以通过求K大数解决, ...

  5. hdu 2665 Kth number(划分树模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=2665 [ poj 2104 2761 ]  改变一下输入就可以过 http://poj.org/problem? ...

  6. HDU 3473 Minimum Sum 【划分树】

    题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3473 ★没想到划分树里面也可以加东西,wcsl 题意: 给你一个由n个数组成的序列,有m次询问,每次询 ...

  7. 划分树基础 —— HDU 2665 Kth number

    对应 HDU 题目 :点击打开链接 Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  8. 【划分树】 POJ 2104 HDU 2665 K-th Number 裸题

    了解了.... #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ma ...

  9. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

最新文章

  1. c语言折半查找法程序,C语言基础:二分查找法演示代码
  2. MPB:南农成艳芬组-​瘤胃厌氧真菌代谢产物的检测方法
  3. AIX 操作系统日常维护须知
  4. ThinkPHP第二十三天(Category表结构、PHPExcel导入数据函数)
  5. mysql子查询字符串位置_MySql基础-子查询
  6. java入门第六天课程_Java基础学习第六天 小游戏
  7. 令人深思的联系-this关键字(隐藏属性static)
  8. Hessian Matrix
  9. 在html中添加class,在HTML标识符的Class中加入Styles
  10. java linux任务管理器_Linux系列教程(二十四)——Linux的系统管理
  11. 怎么批量给文件夹名称加上数字序号前缀?怎么对文件夹名称进行编号排序?
  12. 深度学习Tir-Hi3559A使用unbuntu系统的烧写步骤
  13. 【024】基于51单片机的电子琴加音乐播放器系统Proteus仿真设计
  14. 我的第一篇CSDN博客
  15. 哈尔滨工业大学邮件系统客户端设置
  16. 从零开始写一个RTSP服务器(一)RTSP协议讲解
  17. SX1278设计(硬件部分)
  18. 企业运维之kubernetes监控
  19. Deep Learning(深度学习)资料汇总
  20. Lora SX1278芯片 模块引脚的功能介绍

热门文章

  1. funm--矩阵的函数运算
  2. vue-admin模板第一次使用存在的坑
  3. 雅克比迭代法求方程组的解(Python实现)
  4. 【大脑】改善记忆力的食物有哪些
  5. 什么是Java内存模型中的happens-before
  6. Tomcat8.0 JDK1.8 的详细配置 Win10
  7. BringWindowToTop(), SetForegroundWindow(), SetActiveWindow()
  8. hdu1166敌兵布阵hdu1754I Hate It(线段树入门)
  9. OpenCV2马拉松第22圈——Hough变换直线检測原理与实现
  10. 301重定向怎么进行URL标准化设置?