刚学了指针所以比赛时候就用了,结果re了。请问是哪段没控好?
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<iostream>
#include<vector>
#include<algorithm>
#include<deque>
using namespace std;
typedef struct node
{
int8_t d;
int index;
node *next;
node *prv;
node()
{
d=-1;
}
}linklist;
struct block
{
linklist* lt;
int8_t type;
int il,ir;
block(linklist* l,int8_t t):lt(l),type(t){}
};
linklist ls;
void insertlink(int8_t d,linklist * &p,int index)
{
p->next=new linklist;
p->next->d=d;
p->next->index=index;
p->next->next=NULL;
p->next->prv=p;
p=p->next;
}
void remove(linklist *p)
{
linklist *t=p;
p->prv->next=p->next;
if(p->next!=NULL)
p->next->prv=p->prv;
delete t;
}
deque<block> *dq1,*dq2=NULL;
int main()
{
int n;
cin>>n;
int t=0;
linklist *p=&ls;
linklist* lt=NULL;
int i,it=-1;
dq1=new deque<block>;
for(i=0;i<n;i++)
{
scanf("%d",&t);
insertlink(t,p,i);
if(p->prv->d!=t)
{
if(lt!=NULL)
{
block b(lt,p->prv->d);
b.il=it;
b.ir=i-1;
dq1->push_back(b);
}
lt=p;
it=i;
}
}
block b(lt,t);
b.il=it;
b.ir=p->index;
dq1->push_back(b);
while(dq1!=NULL)
{
while(!dq1->empty())
{
b=dq1->front();
dq1->pop_front();
printf("%d ",b.lt->index+1);
p=b.lt;
remove(p);
b.lt=b.lt->next;
b.il++;
if(b.il>b.ir)
continue;
if(dq2==NULL)
{
dq2=new deque<block>;
dq2->push_back(b);
}
else if(dq2->back().type!=b.type)
{
dq2->push_back(b);
}
else
{
dq2->back().ir+=b.ir-b.il+1;
}
}
printf("\n");
delete dq1;
dq1=dq2;
dq2=NULL;
}
return 0;
}