## Algorithm

Problem Name: Dynamic Array in C

In this HackerRank Functions in C programming problem solution,

Snow Howler is the librarian at the central library of the city of HuskyLand. He must handle requests which come in the following forms:

1 x y : Insert a book with y pages at the end of the x**th helf. 2 x y : Print the number of pages in the y**th book on the x**th helf. 3 x : Print the number of books on the x**th shelf.

Snow Howler has got an assistant, Oshie, provided by the Department of Education. Although inexperienced, Oshie can handle all of the queries of types 2 and 3.

Help Snow Howler deal with all the queries of type 1.

Oshie has used two arrays:

```int* total_number_of_books;
/*
* This stores the total number of books on each shelf.
*/

int** total_number_of_pages;
/*
* This stores the total number of pages in each book of each shelf.
* The rows represent the shelves and the columns represent the books.
*/
```

Input Format

The first line contains an integer total_number_of_shelves, the number of shelves in the library.
The second line contains an integer total_number_of_queries, the number of requests.
Each of the following total_number_of_queries,lines contains a request in one of the three specified formats.

Constraints

• 1  <= total_number_of_shelves <= 10**5
• 1  <= total_number_of_queries <= 10**5
• For each query of the second type, it is guaranteed that a book is present on the x**th shelf at y**th index.
• 0 <= x < total_number_of_shelves
• Both the shelves and the books are numbered starting from 0.
• Maximum number of books per shelf <= 1100

Output Format

Write the logic for the requests of type 1. The logic for requests of types 2 and 3 are provided.

Sample Input 0

```5
5
1 0 15
1 0 20
1 2 78
2 2 0
3 0
```

Sample Output 0

```78
2
```

## Code Examples

### #1 Code Example with C Programming

```Code - C Programming```

``````
#include <stdio.h>
#include <stdlib.h>

/*
* This stores the total number of books in each shelf.
*/
int* total_number_of_books;

/*
* This stores the total number of pages in each book of each shelf.
* The rows represent the shelves and the columns represent the books.
*/
int** total_number_of_pages;

int main()
{
int total_number_of_shelves;
scanf("%d", &total_number_of_shelves);

int total_number_of_queries;
scanf("%d", &total_number_of_queries);

total_number_of_books = (int *) calloc(sizeof(int), total_number_of_shelves);
total_number_of_pages = (int **) calloc(sizeof(int *), total_number_of_shelves);

while (total_number_of_queries--) {
int type_of_query;
scanf("%d", &type_of_query);

if (type_of_query == 1) {
/*
* Process the query of first type here.
*/
int shelf, pages;
scanf("%d %d", &shelf, &pages);

total_number_of_books[shelf]++;
total_number_of_pages[shelf] = realloc(total_number_of_pages[shelf], sizeof(int *) * total_number_of_books[shelf]);
total_number_of_pages[shelf][total_number_of_books[shelf] - 1] = pages;

// (skeliton_tail) ----------------------------------------------------------------------
} else if (type_of_query == 2) {
int x, y;
scanf("%d %d", &x, &y);
printf("%d\n", *(*(total_number_of_pages + x) + y));
} else {
int x;
scanf("%d", &x);
printf("%d\n", *(total_number_of_books + x));
}
}

if (total_number_of_books) {
free(total_number_of_books);
}

for (int i = 0; i  <  total_number_of_shelves; i++) {
if (*(total_number_of_pages + i)) {
free(*(total_number_of_pages + i));
}
}

if (total_number_of_pages) {
free(total_number_of_pages);
}

return 0;
}
``````
Copy The Code &

Input

cmd
5 5 1 0 15 1 0 20 1 2 78 2 2 0 3 0

Output

cmd
78 2