Submission #1300240

#TimeUsernameProblemLanguageResultExecution timeMemory
1300240danglayloi1Pilot (NOI19_pilot)C++20
100 / 100
363 ms38856 KiB
#include <bits/stdc++.h> #define ii pair<int, int> #define fi first #define se second #define inf 0x3f3f3f3f3f3f3f3f using namespace std; using ll = long long; const ll mod=1e9+7; const int nx=1e6+5; ll get(ll x) { return x*(x-1)/2; } int n, q, par[nx], sz[nx]; ii a[nx], b[nx]; ll ans[nx], cur=0; int find(int u) { if(!par[u]) return u; return par[u]=find(par[u]); } void join(int u, int v) { u=find(u); v=find(v); if(u==v) return; if(sz[u]<sz[v]) swap(u, v); cur-=get(sz[u]); cur-=get(sz[v]); sz[u]+=sz[v]; cur+=get(sz[u]); par[v]=u; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>q; for(int i = 1; i <= n; i++) cin>>a[i].fi, a[i].se=i, sz[i]=1; sz[n+1]=1; sort(a+1, a+n+1); for(int i = 1; i <= q; i++) { cin>>b[i].fi; b[i].se=i; } sort(b+1, b+q+1); int j=1; for(int i = 1; i <= q; i++) { while(j<=n && a[j].fi<=b[i].fi) join(a[j].se, a[j].se+1), j++; ans[b[i].se]=cur; } for(int i = 1; i <= q; i++) cout<<ans[i]<<'\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...