Cod sursa(job #1784336)

Utilizator elffikkVasile Ermicioi elffikk Data 19 octombrie 2016 22:39:46
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;

vector <int> a, t;
int rk, rn;

int minrange(int x, int y) {
    int z = a[x];
    int i = x;
    while (i%rk>0) {
        if (z > a[i]) {
            z = a[i];
        }
        i++;
    }
    while (i+rk<y) {
        int j = i/rk;
        if (z > t[j]) {
            z = t[j];
        }
        i+=rk;
    }
    while (i<y) {
        if (z > a[i]) {
            z = a[i];
        }
        i++;
    }
    return z;
}

main() {
    ifstream cin("deque.in");
    ofstream cout("deque.out");
    int K, N;
    cin>>N>>K;
    a.resize(N);
    for (int i = 0; i < N; i++) {
        cin>>a[i];
    }
    rk = ceil(sqrt(K));
    rn = ceil(N*1.0/rk);
    t.resize(rn);
    for (int i = 0; i < a.size(); i++) {
        int j = i/rk;
        if (i%rk ==0 || t[j] > a[i]) {
            t[j] = a[i];
        }
    }
    long long sum = 0;
    for (int i = 0; i <= N-K; i++) {
        sum += minrange(i, i+K);
    }
    cout<<sum;

}