#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;
// cout << "before" << en;
// for(int k=1;k<=n;k++)cout << l[k] << sp;
// cout << en;
// for(int k=1;k<=n;k++)cout << r[k] << sp;
// cout << en;
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;
r[j-1]=0;
l[j+1]=0;
r[j]=0;
l[j]=0;
//cout << l[a]-a+1 << en;
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;
r[j-1]=0;
l[j]=0;
//cout << j-r[j]+1 << en;
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;
l[j+1]=0;
r[j]=0;
//cout << l[j]-j+1 << en;
ans[i]+=qs[l[j]-j+1];
}
else ans[i]++;
// cout << "after" << en;
// for(int k=1;k<=n;k++)cout << l[k] << sp;
// cout << en;
// for(int k=1;k<=n;k++)cout << r[k] << sp;
// cout << en << en;
}
}
//for(int i=1;i<=n;i++)cout << ans[i] << en;
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... |