Cod sursa(job #3131004)

Utilizator Razvan2699Mircea Andrei Razvan Razvan2699 Data 18 mai 2023 23:35:11
Problema Deque Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <vector>
#include <climits>
#include <fstream>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");

struct node {
    int l, r, min_val;
    node* left;
    node* right;
    node(int l, int r) : l(l), r(r), min_val(INT_MAX), left(nullptr), right(nullptr) {}
};

void build(node* root, vector<long long int>& arr) {
    if (root->l == root->r) {
        root->min_val = arr[root->l];
        return;
    }
    int mid = (root->l + root->r) / 2;
    root->left = new node(root->l, mid);
    root->right = new node(mid + 1, root->r);
    build(root->left, arr);
    build(root->right, arr);
    root->min_val = min(root->left->min_val, root->right->min_val);
}

int query(node* root, int i, int j) {
    if (root->l > j || root->r < i) {
        return INT_MAX;
    }
    if (root->l >= i && root->r <= j) {
        return root->min_val;
    }
    int mid = (root->l + root->r) / 2;
    return min(query(root->left, i, j), query(root->right, i, j));
}

int main()
{
    vector<long long int>sir;
    long long int n,val,sum=0,interval,i;
    in>>n>>interval;
    for(i=0;i<n;i++)
    {
        in>>val;
        sir.push_back(val);
    }
    node* root=new node(0,n-1);
    build(root,sir);
    for(i=0;i<n-interval+1;i++)
    {
        val=query(root,i,i+interval-1);
        sum+=val;
    }


    out<<sum;


    return 0;
}