Submission #1144341

#TimeUsernameProblemLanguageResultExecution timeMemory
1144341bestbestPilot (NOI19_pilot)C++20
100 / 100
517 ms74388 KiB
#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 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...