比赛 |
Segment Tree Competition |
评测结果 |
AAAAAAAAA |
题目名称 |
滑动窗口 |
最终得分 |
100 |
用户昵称 |
Hzoi_chairman |
运行时间 |
0.955 s |
代码语言 |
C++ |
内存使用 |
5.23 MiB |
提交时间 |
2016-08-28 19:03:47 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<deque>
using namespace std;
int read()
{
char ch;
int x,f=1;
while(ch=getchar(),!isdigit(ch))if(ch=='-')f=-1;
x=ch-48;
while(ch=getchar(),isdigit(ch))x=x*10+ch-48;
return x*f;
}
deque<int> q,p;
int a[1000100];
void insert(int x)
{
while(!q.empty()&&a[q.back()]<=a[x])q.pop_back();q.push_back(x);
while(!p.empty()&&a[p.back()]>=a[x])p.pop_back();p.push_back(x);
}
int b[1000100],c[1000100];
int init()
{
freopen("window.in","r",stdin);
freopen("window.out","w",stdout);
int n,k;
n=read();
k=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
for(int i=1;i<k;i++)insert(i);
for(int i=k;i<=n;i++)
{
insert(i);
if(!q.empty()&&q.front()<i-k+1)q.pop_front();
if(!p.empty()&&p.front()<i-k+1)p.pop_front();
b[i]=p.front();
c[i]=q.front();
}
for(int i=k;i<=n;i++)printf("%d ",a[b[i]]);
printf("\n");
for(int i=k;i<=n;i++)printf("%d ",a[c[i]]);
return 0;
}
int you=init();
int main()
{
;
}