제출 #633406

#제출 시각아이디문제언어결과실행 시간메모리
633406JJAnawatPilot (NOI19_pilot)C++14
100 / 100
771 ms84660 KiB
#include<bits/stdc++.h> using namespace std; //maximum = 1e6; const int mxN=1e6; int n,q,x; int p[mxN+5]; vector<int> h[mxN+5]; long long ans[mxN+5],sz[mxN+5]; bool vis[mxN+5]; int fp(int i){ if(p[i]==i) return i; return p[i]=fp(p[i]); } long long cal(long long szx){ return szx*(szx+1)/2; } long long un(int x,int y,long long sum){ int u=fp(x),v=fp(y); sum-=cal(sz[u])+cal(sz[v]); if(sz[u]<sz[v]) swap(u,v); p[v]=u; sz[u]+=sz[v]; sum+=cal(sz[u]); return sum; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> q; for(int i=1;i<=mxN;i++){ p[i]=i; sz[i]=1; } for(int i=1;i<=n;i++){ cin >> x; h[x].push_back(i); } for(int i=1;i<=mxN;i++){ ans[i]=ans[i-1]; for(auto j:h[i]){ vis[j]=1; ans[i]++; if(vis[j-1]) ans[i]=un(j,j-1,ans[i]); if(vis[j+1]) ans[i]=un(j,j+1,ans[i]); } } while(q--){ cin >> x; cout << ans[x] << '\n'; } }
#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...