Submission #1300240

#TimeUsernameProblemLanguageResultExecution timeMemory
1300240danglayloi1Pilot (NOI19_pilot)C++20
100 / 100
363 ms38856 KiB
#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
using ll = long long;
const ll mod=1e9+7;
const int nx=1e6+5;
ll get(ll x)
{
    return x*(x-1)/2;
}
int n, q, par[nx], sz[nx];
ii a[nx], b[nx];
ll ans[nx], cur=0;
int find(int u)
{
    if(!par[u]) return u;
    return par[u]=find(par[u]);
}
void join(int u, int v)
{
    u=find(u);
    v=find(v);
    if(u==v) return;
    if(sz[u]<sz[v]) swap(u, v);
    cur-=get(sz[u]);
    cur-=get(sz[v]);
    sz[u]+=sz[v];
    cur+=get(sz[u]);
    par[v]=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].fi, a[i].se=i, sz[i]=1;
    sz[n+1]=1;
    sort(a+1, a+n+1);
    for(int i = 1; i <= q; i++)
    {
        cin>>b[i].fi;
        b[i].se=i;
    }
    sort(b+1, b+q+1);
    int j=1;
    for(int i = 1; i <= q; i++)
    {
        while(j<=n && a[j].fi<=b[i].fi)
            join(a[j].se, a[j].se+1), j++;
        ans[b[i].se]=cur;
    }
    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...