| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
线段树,C++交,G++会T掉#include<iostream>
using namespace std;
#include<vector>
#include<stdio.h>
#pragma GCC optimize(2)
const int N=1e6+3;
struct tre{int minn,maxn;}t[N<<2];int n;
void pushup(int id)
{
t[id].minn=min(t[id<<1].minn,t[id<<1|1].minn);
t[id].maxn=max(t[id<<1].maxn,t[id<<1|1].maxn);
}
void build(int l,int r,int id)
{
if(l==r)
{
scanf("%d",&t[id].minn);t[id].maxn=t[id].minn;return ;
}
int mid=(l+r)>>1;
if(l<=mid)build(l,mid,id<<1);
if(r>mid)build(mid+1,r,id<<1|1);
pushup(id);
}
int ans1,ans2;
void query(int x,int y,int l=1,int r=n,int id=1)
{
if(l>=x&&r<=y)
{
ans1=max(ans1,t[id].maxn);ans2=min(ans2,t[id].minn);return ;
}
int mid=(l+r)>>1;
if(x<=mid)query(x,y,l,mid,id<<1);
if(y>mid)query(x,y,mid+1,r,id<<1|1);
}
int main()
{
int k;cin>>n>>k;
build(1,n,1);
vector<int>a1,a2;
for(int i=1;i<=n-k+1;i++)
{
int j=i+k-1;ans1=-0x3f3f3f3f,ans2=0x3f3f3f3f;
query(i,j);a1.push_back(ans1);a2.push_back(ans2);
}
for(int i=0;i<a2.size();i++)printf("%d%c",a2[i],i==a2.size()-1?'\n':' ');
for(int i=0;i<a1.size();i++)printf("%d%c",a1[i],i==a1.size()-1?'\n':' ');
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator