比赛 |
Segment Tree Competition |
评测结果 |
AAAAAAAAA |
题目名称 |
滑动窗口 |
最终得分 |
100 |
用户昵称 |
森林 |
运行时间 |
2.371 s |
代码语言 |
C++ |
内存使用 |
30.83 MiB |
提交时间 |
2016-08-28 19:19:24 |
显示代码纯文本
#include<iostream>
#include<stdio.h>
#define fastcall __attribute__((optimize("-O3")))
#define mid ((l+r)>>1)
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
using namespace std;
const int maxn=1000010;
int t_max[maxn<<2]={0},t_min[maxn<<2]={0},n,k;
template<typename T>fastcall inline void QR(T& x){
char ch;bool f=0;
while(ch=getchar(),(ch<'0'||ch>'9')&&ch!='-');
if(ch=='-')f=1,ch=getchar();x=ch-48;
while(ch=getchar(),ch>='0'&&ch<='9')x=x*10+ch-48;if(f)x=-x;
}
fastcall inline void build(int rt,int l,int r){
if(l==r){
QR(t_min[rt]);
t_max[rt]=t_min[rt];
return;
}
build(lson);
build(rson);
t_max[rt]=max(t_max[rt<<1],t_max[rt<<1|1]);
t_min[rt]=min(t_min[rt<<1],t_min[rt<<1|1]);
}
int ql,qr,res;
fastcall void query_max(int rt,int l,int r){
if(ql<=l&&r<=qr){
res=max(res,t_max[rt]);
return;
}
if(ql<=mid)query_max(lson);
if(mid<qr)query_max(rson);
}
fastcall int query_max(int l,int r){
ql=l,qr=r,res=0;
query_max(1,1,n);
return res;
}
fastcall void query_min(int rt,int l,int r){
if(ql<=l&&r<=qr){
res=min(res,t_min[rt]);
return;
}
if(ql<=mid)query_min(lson);
if(mid<qr)query_min(rson);
}
fastcall int query_min(int l,int r){
ql=l,qr=r,res=0x7fffffff;
query_min(1,1,n);
return res;
}
int main(){
freopen("window.in","r",stdin);
freopen("window.out","w",stdout);
QR(n),QR(k);
build(1,1,n);
for(int i=1;i<=n-k+1;i++)printf("%d ",query_min(i,i+k-1));putchar('\n');
for(int i=1;i<=n-k+1;i++)printf("%d ",query_max(i,i+k-1));putchar('\n');
fclose(stdin);
fclose(stdout);
return 0;
}