#include <bits/stdc++.h>
using namespace std;
#define en '\n'
#define sp ' '
typedef long long ll;
#define Linux ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pii pair<int,int>
const int N=1e6+10;
vector<int> v[N];
int n,Q,temp,t;
ll ans[N],qs[N];
bool chk;
int l[N],r[N],a[N];
//in l index is left element is right of range
//in r index is right element is left of range
int main(){Linux
cin >> n >> Q;
for(int i=1;i<N;i++)qs[i]=qs[i-1]+i;
for(int i=1;i<=n;i++){
cin >> temp;
v[temp].push_back(i);
}
for(int i=1;i<N;i++){
ans[i]=ans[i-1];
if(v[i].empty())continue;
for(int j:v[i]){
r[j]=j;
l[j]=j;
int a=r[j-1],b=l[j+1];
if(r[j-1] && l[j+1]){
ans[i]-=qs[j-1-r[j-1]+1]+qs[l[j+1]-(j+1)+1];
l[a]=b;
r[b]=a;
ans[i]+=qs[l[a]-a+1];
}
else if(r[j-1]){
ans[i]-=qs[j-1-r[j-1]+1];
l[a]=j;
r[j]=a;
ans[i]+=qs[j-r[j]+1];
}
else if(l[j+1]){
ans[i]-=qs[l[j+1]-(j+1)+1];
r[b]=j;
l[j]=b;
ans[i]+=qs[l[j]-j+1];
}
else ans[i]++;
}
}
while(Q--){
cin >> t;
cout << ans[t] << en;
}
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... |