POJ 2823线段树水
来源:互联网 发布:听课软件哪个好 编辑:程序博客网 时间:2024/05/01 19:47
RMQ问题
线段树水过:
#include "stdio.h"#include "string.h"#include "stdlib.h"int Min[1000010],Max[1000010];struct node{ int l,r,Max,Min;}data[4000010];void build(int l,int r,int k){ int mid; data[k].l=l; data[k].r=r; if (l==r) { scanf("%d",&data[k].Max); data[k].Min=data[k].Max; return ; } mid=(l+r)/2; build(l,mid,k*2); build(mid+1,r,k*2+1); if (data[k*2].Max>data[k*2+1].Max) data[k].Max=data[k*2].Max; else data[k].Max=data[k*2+1].Max; if (data[k*2].Min<data[k*2+1].Min) data[k].Min=data[k*2].Min; else data[k].Min=data[k*2+1].Min;}int query(int l,int r,int k,int op){ int x,y,mid; if (data[k].l==l && data[k].r==r) { if (op==1) return data[k].Max; else return data[k].Min; } mid=(data[k].l+data[k].r)/2; if (r<=mid) return query(l,r,k*2,op); else if (l>mid) return query(l,r,k*2+1,op); else { x=query(l,mid,k*2,op); y=query(mid+1,r,k*2+1,op); if(op==1) { if (x>y) return x; else return y; } else { if (x<y) return x; else return y; } }}int main(){ int n,m,i; while (scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); for (i=1;i<=n-m+1;i++) { Max[i]=query(i,i+m-1,1,1); Min[i]=query(i,i+m-1,1,0); } for (i=1;i<n-m+1;i++) printf("%d ",Min[i]); printf("%d\n",Min[i]); for (i=1;i<n-m+1;i++) printf("%d ",Max[i]); printf("%d\n",Max[i]); } return 0;}
0 0
- POJ 2823线段树水
- poj 2823 线段树
- 线段树-poj-2823
- poj 2823 线段树
- POJ 2823 线段树,RMQ
- poj 2823(线段树)
- POJ 2823 Sliding Window //线段树
- POJ 2823 阉割版线段树
- POJ 2823 线段树 暴力之...
- POJ 2823 Sliding Window 线段树
- poj 2823 Sliding Window (线段树,RMQ)
- POJ 2823 Sliding Window 线段树求解
- POJ 2823 线段树区间查询
- POJ 2823 线段树简单操作
- POJ 2823 线段树 Or 单调队列
- poj 2823 Sliding Window(线段树)
- POJ 2823 Sliding Window 线段树
- poj 2823 Sliding Window 线段树基础
- 什么时候该使用前置声明?
- 管理高流量WordPress博客,并不是一件容易的任务
- 哲理故事
- 仿QQ登录界面的QComboBox
- 程序员如何自我优化
- POJ 2823线段树水
- HTML语言中TR、TH和TD有什么区别?
- 简史迪斯尼
- 如何绕过oracle listener 监听的密码设置
- 简史动画
- 黑马程序员_TreeSet 学习总结
- 哲理故事
- Codeforces Round #257 (Div. 1)449A - Jzzhu and Chocolate(贪心、数学)
- NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别