This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<iostream>
#include<vector>
#include<algorithm>
#define ep emplace
#define eb emplace_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
using namespace std;
typedef long long ll;
typedef pair<int,int>pi;
typedef pair<ll,ll>pl;
const int inf=1e9+7;
const ll INF=1e18+7;
int pa[1000010];
int par(int x)
{
if(pa[x]==0)
return x;
return pa[x]=par(pa[x]);
}
ll cans;
ll sz[1000010];
inline void uni(int x,int y)
{
x=par(x);
y=par(y);
if(x==y)
return;
cans-=sz[x]*(sz[x]+1)/2;
cans-=sz[y]*(sz[y]+1)/2;
pa[y]=x;
sz[x]+=sz[y];
cans+=sz[x]*(sz[x]+1)/2;
return;
}
ll ans[1000010];
bool able[1000010];
vector<int>lst[1000010];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n,q;
cin>>n>>q;
vector<int>v(n);
for(int&t:v)
cin>>t;
v.insert(v.begin(),inf);
for(int i=0;i++<n;)
lst[v[i]].eb(i);
for(int i=0;i++<1000000;)
{
for(int&t:lst[i])
{
able[t]=1;
cans+=sz[t]=1;
if(able[t-1])
uni(t-1,t);
if(able[t+1])
uni(t,t+1);
}
ans[i]=cans;
}
while(q-->0)
{
int x;
cin>>x;
cout<<ans[x]<<'\n';
}
cout.flush();
return 0;
}
# | 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... |