划分树+二分

Super Mario

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2625    Accepted Submission(s): 1274

Problem Description
Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory. Now the poor princess is in trouble again and Mario needs to save his lover. We regard the road to the boss’s castle as a line (the length is n), on every integer point i there is a brick on height hi. Now the question is how many bricks in [L, R] Mario can hit if the maximal height he can jump is H.
Input
The first line follows an integer T, the number of test data.
For each test data:
The first line contains two integers n, m (1 <= n <=10^5, 1 <= m <= 10^5), n is the length of the road, m is the number of queries.
Next line contains n integers, the height of each brick, the range is [0, 1000000000].
Next m lines, each line contains three integers L, R,H.( 0 <= L <= R < n 0 <= H <= 1000000000.)
Output
For each case, output "Case X: " (X is the case number starting from 1) followed by m lines, each line contains an integer. The ith integer is the number of bricks Mario can hit for the ith query.
Sample Input
1 10 10 0 5 2 7 5 4 3 8 7 7 2 8 6 3 5 0 1 3 1 1 9 4 0 1 0 3 5 5 5 5 1 4 6 3 1 5 7 5 7 3
Sample Output
Case 1: 4 0 0 3 1 2 0 1 5 1
Source
2012 ACM/ICPC Asia Regional Hangzhou Online
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int maxn=100100;int tree[20][maxn];
int sorted[maxn];
int toleft[20][maxn];void build(int l,int r,int dep)
{if(l==r) return ;int mid=(l+r)/2;int same=mid-l+1;for(int i=l;i<=r;i++)if(tree[dep][i]<sorted[mid]) same--;int lpos=l,rpos=mid+1;for(int i=l;i<=r;i++){if(tree[dep][i]<sorted[mid])tree[dep+1][lpos++]=tree[dep][i];else if(tree[dep][i]==sorted[mid]&&same>0){tree[dep+1][lpos++]=tree[dep][i];same--;}else tree[dep+1][rpos++]=tree[dep][i];toleft[dep][i]=toleft[dep][l-1]+lpos-l;}build(l,mid,dep+1);build(mid+1,r,dep+1);
}int query(int L,int R,int l,int r,int dep,int k)
{if(l==r) return tree[dep][l];int mid=(L+R)/2;int cnt=toleft[dep][r]-toleft[dep][l-1];if(cnt>=k){int newl=L+toleft[dep][l-1]-toleft[dep][L-1];int newr=newl+cnt-1;return query(L,mid,newl,newr,dep+1,k);}else{int newr=r+toleft[dep][R]-toleft[dep][r];int newl=newr-(r-l-cnt);return query(mid+1,R,newl,newr,dep+1,k-cnt);}
}int n,m;int bin(int l,int r,int h)
{int low=1,high=r-l+1,mid,ans=0;while(low<=high){mid=(low+high)/2;int temp=query(1,n,l,r,0,mid);if(h>=temp){ans=mid;low=mid+1;}else high=mid-1;}return ans;
}int main()
{int T_T,cas=1;scanf("%d",&T_T);while(T_T--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",sorted+i);tree[0][i]=sorted[i];}sort(sorted+1,sorted+1+n);build(1,n,0);int l,r,h;printf("Case %d:\n",cas++);while(m--){scanf("%d%d%d",&l,&r,&h);l++,r++;printf("%d\n",bin(l,r,h));}}return 0;
}

HDOJ 4417 Super Mario相关推荐

  1. hdoj 4417 Super Mario 【树状数组 + 思维】

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

  2. hdu 4417 Super Mario 树状数组||主席树

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

  3. HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)

    Super Mario 思路 区间查找问题,容易想到离线莫队,确实这题就是莫队,接下来我们考虑如何维护区间高度值问题. 既然是离线嘛,我们容易想到离散化和他挂钩,想想这题是否需要离散化,高度的最大值是 ...

  4. hdu 4417 Super Mario

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

  5. HDU 4417 Super Mario(划分树问题求不大于k的数有多少)

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

  6. HDU 4417 Super Mario(划分树)

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

  7. HDU 4417 Super Mario(线段树)

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

  8. #HDU 4417 Super Mario (主席树 + 二分)

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

  9. hdu 4417 Super Mario 划分树+二分

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意: 给定一个长度为n的序列,求区间[L,R]中小于h的个数: 思路: 分三种情况: 1:如果该区间最小 ...

最新文章

  1. 2022-2028年中国海洋电力行业市场深度分析及发展策略分析报告
  2. micro850通讯协议msg_micro850通讯协议msg_半导体semi通讯的协议SECS/GEM
  3. SOAP消息机制简介
  4. Plugin org.apache.maven.plugins:maven-resources-plugin:2.6
  5. matlab 读取mov文件格式,VideoReader 支持的文件格式 - MATLAB VideoReader.getFileFormats - MathWorks 中国...
  6. 快速掌握用python处理Excel
  7. 利用程序动态管理Web.config文件
  8. jQuery实现title提示效果
  9. 如何解决This system is not registered with RHN.
  10. 2、认识常见网络设备
  11. Word各级标题格式设置和自动排序(标题序号)设置
  12. Windows 禁用U盘的程序,不用注册表方式。
  13. android开发 app消息提醒功能,Android中利用App实现消息推送机制的代码
  14. 斐讯n1遥控器app(支持休眠和唤醒)——WiFi篇
  15. 有没有好奇过路由器宽带拨号的mtu值为什么是1492呢?了解MTU与IP分片
  16. 如何利用设备管理系统做好设备预防维护保养工作?
  17. word/wps 插入图片变糊
  18. 【2024】末两位数
  19. 用Halo搭建个人博客
  20. 关于PlantSimulation 3D界面灰黑色解决方案

热门文章

  1. 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(二)】
  2. ORA-19502ORA-27072
  3. ubuntu 禁用鼠标中键复制
  4. 学系统集成项目管理工程师(中项)系列17b_范围管理(下)
  5. 螯合放射性核素127985-74-4,p-SCN-Bn-DOTA连接单克隆抗体的一种双功能螯合剂
  6. Attention is all you need pytorch实现 源码解析01 - 数据预处理、词表的构建
  7. 主动降噪将成为TWS耳机的必备
  8. 环信为自己的app加入即时通信功能的流程
  9. IEEE AJE期刊润色 流程记录
  10. 支付中心设计-支付通道