#include #define MAX_G 1000001 typedef struct item_typ { int cas; int bay; int goods; } item; item heap[1005]; int heap_count=0; void heap_insert(item prvek) { int index=++heap_count; heap[index]=prvek; while (index > 1 && (heap[index].cas > heap[index>>1].cas)) { item temp=heap[index]; heap[index]=heap[index>>1]; heap[(index>>=1)]=temp; } } item heap_extract(void) { int index=1; item what=heap[1]; heap[1]=heap[heap_count--]; for(;;) { int j=index<<1; item temp; if (j> heap_count) break; if (j+1 <= heap_count && heap[j+1].cas > heap[j].cas) j++; if (heap[index].cas >= heap[j].cas) break; temp=heap[index]; heap[index]=heap[j]; heap[j]=temp; index=j; } return what; } typedef struct node_typ{ int cas; int next; } node; int spojak[MAX_G]; node ns[MAX_G<<1]; int ns_len; int C,B,G,N; int nakladaky[MAX_G]; int goods2bay[MAX_G]; int main(void) { int i,j,t; item it; scanf("%d",&C); for (i=0;i=0;j--) { ns[ns_len].cas=j; ns[ns_len].next=spojak[nakladaky[j]]; spojak[nakladaky[j]]=ns_len++; } for (j=0;j=1;j--) { if (heap[j].bay == goods2bay[nakladaky[t]] ) { heap[j].cas=ns[spojak[nakladaky[t]]].cas; while (j > 1 && (heap[j].cas > heap[j>>1].cas)) { item temp=heap[j]; heap[j]=heap[j>>1]; heap[(j>>=1)]=temp; } break; } } printf("NO ACTION\n"); } else { it=heap_extract(); if (it.goods!=-1) goods2bay[it.goods]=-1; spojak[nakladaky[t]]=ns[spojak[nakladaky[t]]].next; it.cas=ns[spojak[nakladaky[t]]].cas; it.goods=nakladaky[t]; heap_insert(it); goods2bay[nakladaky[t]]=it.bay; printf("LOAD %d %d\n",it.bay+1,nakladaky[t]+1); } } } return 0; }