Submission #1335775

#TimeUsernameProblemLanguageResultExecution timeMemory
1335775hoangtien69Pilot (NOI19_pilot)C++20
40 / 100
32 ms5116 KiB
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
const int MAXN = 1e6 + 5;

int n, q;
int a[MAXN];
int b[MAXN];
int query[MAXN];
vector<pii> pos;
vector<pii> peal;
int sz[MAXN];
int par[MAXN];
int res = 0;
int ans[MAXN];

int tinh(int x)
{
    return x * (x + 1) / 2;
}
void init()
{
    for (int i = 1; i <= n; i++)
    {
        sz[i] = 1;
        par[i] = i;
    }
}
int findd(int u)
{
    if (par[u] == u) return u;
    return par[u] = findd(par[u]);
}
void join(int u, int v)
{
    u = findd(u);
    v = findd(v);
    if (u == v) return;
    par[v] = u;
    res -= tinh(sz[u]) + tinh(sz[v]);
    sz[u] += sz[v];
    res += tinh(sz[u]);
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        b[i] = a[i];
    }
    sort(b + 1, b + n + 1);
    for (int i = 1; i <= q; i++)
    {
        cin >> query[i];
        peal.push_back({query[i], i});
    }
    for (int i = 1; i < n; i++)
    {
        pos.push_back({max(a[i], a[i + 1]), i});
    }
    sort(peal.begin(), peal.end());
    sort(pos.begin(), pos.end());
    init();
    int id = 0;
    for (int i = 0; i < q; i++)
    {
        int T = peal[i].first;
        int idx = peal[i].second;
        while (id < pos.size() && pos[id].first <= T)
        {
            join(pos[id].second, pos[id].second + 1);
            id++;
        }
        int single = upper_bound(b + 1, b + n + 1, T) - b - 1;
        ans[idx] = res + single;
    }
    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...