| ||||||||||
| 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 | |||||||||
救命啊 绝对O(N)的算法 为什么还会超时啊#include<iostream>
#include<stdio.h>
using namespace std;
struct Node
{
int v,ind;
Node *next,*pre;
};
Node *H1,*T1;
Node *H2,*T2;
Node N1[1<<20];
Node N2[1<<20];
int result[1<<20];
int n,k;
void init()
{
scanf("%d%d",&n,&k);
scanf("%d",&N1[0].v);
N2[0].v=N1[0].v;
N2[0].ind=N1[0].ind=0;
N1[0].next=NULL;
N1[0].pre=NULL;
H1=&N1[0];T1=&N1[0];
N2[0].next=NULL;
N2[0].pre=NULL;
H2=&N2[0];T2=&N2[0];
}
void insert1(int i)
{
N1[i].pre=NULL;
N1[i].next=H1;
H1->pre=&N1[i];
H1=&N1[i];
}
void insert2(int i)
{
N2[i].pre=NULL;
N2[i].next=H2;
H2->pre=&N2[i];
H2=&N2[i];
}
void del1(int i)
{
if (N1[i].next==NULL)
{
T1=N1[i].pre;
N1[i].pre->next=NULL;
}
else
{
N1[i].pre->next=N1[i].next;
N1[i].next->pre=N1[i].pre;
}
}
void del2(int i)
{
if (N2[i].next==NULL)
{
T2=N2[i].pre;
N2[i].pre->next=NULL;
}
else
{
N2[i].pre->next=N2[i].next;
N2[i].next->pre=N2[i].pre;
}
}
void get_ans()
{
int i,j;
for (i=1;i<k-1;i++)
{
scanf("%d",&N1[i].v);
N1[i].ind=i;
N2[i].ind=i;
N2[i].v=N1[i].v;
insert1(i);
insert2(i);
Node *tmp=N1[i].next;
while (tmp!=NULL)
if (tmp->v>=N1[i].v)
{
del1(tmp->ind);
tmp=tmp->next;
}
else break;
tmp=N2[i].next;
while (tmp!=NULL)
if (tmp->v<=N2[i].v)
{
del2(tmp->ind);
tmp=tmp->next;
}
else break;
}
for (i=k-1;i<n;i++)
{
scanf("%d",&N1[i].v);
N1[i].ind=i;
N2[i].ind=i;
N2[i].v=N1[i].v;
insert1(i);
Node *tmp=N1[i].next;
while (tmp!=NULL)
if (tmp->v>=N1[i].v)
{
del1(tmp->ind);
tmp=tmp->next;
}
else break;
if (i==n-1) printf("%d\n",T1->v);
else printf("%d ",T1->v);
if (T1->ind==i-k+1)
del1(T1->ind);
insert2(i);
tmp=N2[i].next;
while (tmp!=NULL)
if (tmp->v<=N2[i].v)
{
del2(tmp->ind);
tmp=tmp->next;
}
else break;
result[i-k+1]=T2->v;
if (T2->ind==i-k+1)
del2(T2->ind);
}
for (i=0;i<n-k+1;i++)
if (i)
printf(" %d",result[i]);
else
printf("%d",result[0]);
printf("\n");
}
int main()
{
init();
get_ans();
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator