#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |