Submission #330771

#TimeUsernameProblemLanguageResultExecution timeMemory
330771ThaiBaHungPilot (NOI19_pilot)C++14
89 / 100
1090 ms135592 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 3;
int n, q;
int a[N];
int qu[N];
long long L[N], R[N];
stack < int > st;
vector < int > num[N];
vector < int > pos[N];
long long ans[N];
vector < int > cur;

int ma = 0;

int main()
{
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    //freopen("pilot.in","r",stdin); freopen("pilot.out","w",stdout);

    cin >> n >> q;

    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        num[a[i]].push_back(i);
    }

    for (int i = 1; i <= q; i++)
        cin >> qu[i], ma = max(ma, qu[i]), pos[qu[i]].push_back(i);

    st.push(0);
    a[0] = 1e9 + 7;

    for (int i = 1; i <= n; i++)
    {
        while (st.size() && a[i] >= a[st.top()])
            st.pop();
        L[i] = st.top() + 1;
        st.push(i);
    }

    while (st.size()) st.pop();
    a[n + 1] = 1e9 + 7;
    st.push(n + 1);

    for (int i = n; i >= 1; i--)
    {
        while (st.size() && a[i] > a[st.top()])
            st.pop();
        R[i] = st.top() - 1;
        st.push(i);
    }

    long long res = 0;

    for (int i = 1; i <= ma; i++)
    {
        for (int u : num[i])
            cur.push_back(u);

        if (pos[i].size())
        {
            for (int u : cur)
            {
                long long lo = u - L[u] + 1;
                long long hi = R[u] - u + 1;
                res += hi * lo;
            }

            for (int vt : pos[i])
                ans[vt] = res;

            cur.clear();
        }
    }

    for (int i = 1; i <= q; i++)
        cout << ans[i] << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...