手写链表TLE求调

P1160 队列安排

``` #include<cstdio> using namespace std; int n,m; struct node { int pre,nxt; }a[100010]; void init() { for(int i=1;i<=n;i++) a[i].pre=a[i].nxt=-1; a[1].nxt=-1; a[1].pre=0; a[0].nxt=1; } void insert_left(int pos,int k) { a[a[pos].pre].nxt=k; a[k].pre=a[pos].pre; a[pos].pre=k; a[k].nxt=pos; } void insert_right(int pos,int k) { a[a[pos].nxt].pre=k; a[k].nxt=a[pos].nxt; a[pos].nxt=k; a[k].pre=pos; } void remove(int x) { if(a[x].pre==-1) return; a[a[x].pre].nxt=a[x].nxt; a[a[x].nxt].pre=a[x].pre; a[x].pre=-1; a[x].nxt=-1; } void print() { int start=a[0].nxt; while(1) { printf("%d ",start); if(a[start].nxt==-1) break; start=a[start].nxt; } } int main() { scanf("%d",&n); init(); for(int i=2;i<=n;i++) { int k,p; scanf("%d%d",&k,&p); if(p==1) insert_right(k,i); else insert_left(k,i); } scanf("%d",&m); for(int i=1;i<=m;i++) { int x; scanf("%d",&x); remove(x); } print(); return 0; } ``` 没有在你的代码上改,但有一种更简单的方法!
by Leo2525 @ 2023-09-27 21:59:56


@[Leo2525](/user/983112) 谢大佬,已关
by A_R_O_N_A @ 2023-09-28 09:38:39


|