POJ 2251 线段树
来源:互联网 发布:单片机数码管显示数字 编辑:程序博客网 时间:2024/06/05 02:21
也可以用优先队列做哦,每次新加入一个元素的时候就踢掉比这个元素小的那些元素,然后队首就是最大值。
用线段树是基础题。
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn=1048576;int arr[maxn],len,K,Min[maxn*2],Max[maxn*2];void init(){ memset(Min,0x7f,sizeof(Min)); memcpy(Min+maxn,arr,sizeof(int)*len); memset(Max,0xAf,sizeof(Max)); memcpy(Max+maxn,arr,sizeof(int)*len); for(int rt=maxn-1;rt;rt--){ Min[rt]=min(Min[rt<<1],Min[rt<<1|1]); Max[rt]=max(Max[rt<<1],Max[rt<<1|1]); }}int query_min(int L,int R,int rt,int left,int right){ if(left>=L&&right<=R){ return Min[rt]; } int mid=(left+right)>>1; return min( mid>=L?query_min(L,R,rt<<1,left,mid):0x7FFFffFF , mid<R?query_min(L,R,rt<<1|1,mid+1,right):0x7FfFffFF );}int query_max(int L,int R,int rt,int left,int right){ if(left>=L&&right<=R){ return Max[rt]; } int mid=(left+right)>>1; int a=mid>=L?query_max(L,R,rt<<1,left,mid):0xAFFFffFF; int b=mid<R?query_max(L,R,rt<<1|1,mid+1,right):0xaFfFffFF; return max( a , b );}int main(){ scanf("%d%d",&len,&K); for(int i=0;i<len;i++) scanf("%d",arr+i); init(); for(int i=1;i<=len-K+1;i++) printf("%d ",query_min(i,i+K-1,1,1,maxn)); printf("\n"); for(int i=1;i<=len-K+1;i++) printf("%d ",query_max(i,i+K-1,1,1,maxn)); return 0;}
0 0
- POJ 2251 线段树
- POJ 2777 线段树
- poj 3468 线段树
- 线段树 POJ 2352
- POJ 3264 线段树
- POJ 3468 线段树
- poj 2352 线段树
- poj 3225(线段树)
- poj 3225(线段树)
- poj 2528 线段树
- poj 2181 (线段树)
- POJ 2828 (线段树)
- POJ 2777 (线段树)
- POJ 2352 线段树
- POJ-4047-线段树
- POJ 2828 线段树
- poj 2886 线段树
- poj(3264+线段树)
- Android简易自定义日历控件实践
- React Native通信机制详解
- VS2015+QT5开发,ui界面无法更新问题解决方法
- Install PG fail on windows: Problem running post-install step.
- jquery ajax超时设置
- POJ 2251 线段树
- 【初等概率论】 01
- 6735添加分区
- 战地体能训练模拟器
- 日期之间相差的天数,月份差,日期月份加一个月 ,取得当月第一天 和最后一天日期,两个不同月之间的总天数,当月总天数
- Unity MeshRender中material和sharedmaterial的区别
- 提出问题谦称开头
- Leetcode 220. Contains Duplicate III
- 登录时拦截器免验证失效