Submission #1150228

#TimeUsernameProblemLanguageResultExecution timeMemory
1150228domblyPilot (NOI19_pilot)C++20
100 / 100
499 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...