1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <bitset>
#include <fstream>
using namespace std;

#define pi pair<int,int>
#define mp(x,y) make_pair(x,y)
#define fi first
#define se second
#define pl pair<long long,long long>
#define pb push_back
#define vi vector<int>
#define ll long long

const int MAXN=1e6+5, mod=1e9+7;
ll t[MAXN],w[MAXN],czas,dod,sum[MAXN],akt;
bool byl[MAXN];
int szef[MAXN],kon[MAXN],ilu[MAXN],pocz[MAXN],n;
vector<int> lacz[MAXN];

int daj(int co)
{
    if (szef[co]!=co)
        szef[co]=daj(szef[co]);

    return szef[co];
}

ll wnosi(int p, int k, ll kiedy)
{
    return (t[p]+t[p]+kiedy*(k-p))*(k-p+1)/2-(sum[k]-sum[p-1]);
}

void polacz(int a, int b)
{
    a=daj(a);
    b=daj(b);
    dod-=(ll)ilu[a]*(ilu[a]-1)/2;
    dod-=(ll)ilu[b]*(ilu[b]-1)/2;
    czas-=wnosi(pocz[a],kon[a],akt);
    czas-=wnosi(pocz[b],kon[b],akt);
    szef[a]=b;
    ilu[b]+=ilu[a];
    pocz[b]=pocz[a];
    dod+=(ll)ilu[b]*(ilu[b]-1)/2;
    czas+=wnosi(pocz[b],kon[b],akt);

    if (kon[b]!=n)
    {
        ll x=(t[kon[b]+1]-t[pocz[b]])/ilu[b]+1;

        if (x<=1000000)
            lacz[x].pb(kon[b]);
    }
}

int main ()
{
    int a,b,c,d,e,f,g,z,k,m;

    scanf("%d%d", &n, &m);
    ilu[0]=1;

    for (a=1; a<=n; a++)
    {
        scanf("%lld", &t[a]);
        sum[a]=sum[a-1]+t[a];
        kon[a]=pocz[a]=a;
        ilu[a]=1;
        szef[a]=a;

        if ((ll)t[a]-t[a-1]+1<=1000000)
            lacz[t[a]-t[a-1]+1].pb(a-1);
    }

    for (a=1; a<=1000000; a++)
    {
        czas+=dod;
        akt=a;

        for (c=0; c<lacz[a].size(); c++)
        {
            b=lacz[a][c];

            if (byl[b])
                continue;
            else
            {
                byl[b]=1;
                polacz(b,b+1);
            }
        }

        w[a]=czas;
    }

    while (m--)
    {
        scanf("%d", &a);
        printf("%lld\n", w[a]);
    }

    return 0;
}