Submission #1144339

#TimeUsernameProblemLanguageResultExecution timeMemory
1144339bestbestPilot (NOI19_pilot)C++20
100 / 100
329 ms74308 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; // 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 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...