POJ3264 Balanced Lineup(线段树静态)
来源:互联网 发布:java json转string 编辑:程序博客网 时间:2024/05/21 11:18
题目大意:
一位农夫有n头牛,给出每头牛的身高。求q个范围内的牛中最高的和最矮的身高差。
思路:线段树求一个序列中的最大值和最小值:
# include<stdio.h># include<stdlib.h># include<algorithm>using namespace std;int a[10000000],x,y;struct node{ int b,e,s,c;}b[1000000];int big(int x,int y){//求x——y的最大值 if(x==y){ return a[x]; } return max(big(x,(x+y)/2),big((x+y)/2+1,y));}int lit(int x,int y){//求x——y的最小值 if(x==y){ return a[x]; } return min(lit(x,(x+y)/2),lit((x+y)/2+1,y));}void lily(int t,int x,int y){//建树 b[t].b=x; b[t].e=y; b[t].s=big(x,y);//求这个范围内的最大值 b[t].c=lit(x,y); if(x==y)return; lily(t*2,x,(x+y)/2);//第归建树 lily(t*2+1,(x+y)/2+1,y);}int find(int t,int r,int l){//查询最大值 if(r==x &&l==y)return b[t].s;//当前范围=需求范围返回最大值 if(r>=x &&l<=y){ return b[t].s; } int h=0,f=0; if((r<x && l<x) ||(r>y && l>y))return 0;//不在范围内返回0 if(x<=(r+l)/2)//第归 h=find(t*2,r,(r+l)/2); if(y>=(r+l)/2) f=find(t*2+1,(r+l)/2+1,l); return max(h,f);//求最大}int finds(int t,int r,int l){//查询最小值 if(r==x &&l==y){return b[t].c;}//当前范围=需求范围返回最小值 if(r>=x &&l<=y){ return b[t].c; } int h=0,f=0; if((r<x && l<x) ||(r>y && l>y))return 0;//不在范围内返回0 if(x<=(r+l)/2)//第归 h=finds(t*2,r,(r+l)/2); if(y>=(r+l)/2) f=finds(t*2+1,(r+l)/2+1,l); if(h!=0 &&f!=0)//返回小且不为0 return min(h,f); if(h!=0)return h; return f;}int main(){ int n,m,i; scanf("%d%d",&n,&m);//读入 for(i=1;i<=n;i++){ scanf("%d",&a[i]); } lily(1,1,n); for(i=1;i<=m;i++){ scanf("%d%d",&x,&y); printf("%d\n",find(1,1,n)-finds(1,1,n));//输出 } return 0;}
3 2
- POJ3264 Balanced Lineup(线段树静态)
- Balanced Lineup poj3264 线段树
- poj3264,Balanced Lineup,线段树
- poj3264 Balanced Lineup(线段树)
- poj3264 Balanced Lineup(线段树)
- POJ3264 Balanced Lineup(线段树)
- POJ3264 Balanced Lineup 【线段树】
- POJ3264 Balanced Lineup(线段树应用)
- POJ3264 Balanced Lineup 线段树基础
- Balanced Lineup(poj3264,线段树入门)
- POJ3264 Balanced Lineup 【线段树】+【单点更新】
- POJ3264 Balanced Lineup RMQ 线段树
- POJ3264 Balanced Lineup(线段树入门)
- POJ3264--Balanced Lineup(线段树模板题)
- POJ3264 Balanced Lineup 线段树|ST表
- 线段树之POJ3264 Balanced Lineup
- POJ3264 Balanced Lineup 线段树||RMQ
- 【POJ3264】Balanced Lineup,线段树入门
- android实现截屏操作
- 求裴波那契数列的第n项---递归+改进
- LTS任务调度使用
- DELPHI 利用WINRRA 实现压缩解压
- Android安全开发之Provider组件安全
- POJ3264 Balanced Lineup(线段树静态)
- ArrayBlockingQueue和LinkedBlockingQueue的使用
- android6.0 framework修改使用两个声卡
- 并发注意事项(2)并发工具优先于wait和notify
- 学生信息管理系统优化
- android eclipse基础开发环境搭建--最新安卓6.0 SDK
- 二叉树的分层打印(三)
- KMP模式匹配算法
- iOS开发中App启动页和应用缩略图标的两种设置方式