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

#define SIZE 1000000

int main() {
    int *arr = (int*)malloc(SIZE * sizeof(int));
    int sum_parallel_for = 0;
    int sum_sections = 0;

    // Initialize array with random values
    for (int i = 0; i < SIZE; ++i) {
        arr[i] = rand() % 100; 
    }

    // Work sharing with parallel for
    #pragma omp parallel for reduction(+:sum_parallel_for)
    for (int i = 0; i < SIZE; ++i) {
        sum_parallel_for += arr[i];
    }

    // Work sharing with sections
    #pragma omp parallel sections
    {
        #pragma omp section
        {
            for (int i = 0; i < SIZE / 2; ++i) {
                sum_sections += arr[i];
            }
        }
        #pragma omp section
        {
            for (int i = SIZE / 2; i < SIZE; ++i) {
                sum_sections += arr[i];
            }
        }
    }

    printf("Sum using parallel for: %d\n", sum_parallel_for);
    printf("Sum using sections: %d\n", sum_sections);

    free(arr);

    return 0;
}