Submission #1231716

#TimeUsernameProblemLanguageResultExecution timeMemory
1231716Muhammad_AneeqNile (IOI24_nile)C++20
Compilation error
0 ms0 KiB
#include "nile.h" #include <vector> #include <algorithm> #include <iostream> using namespace std; int const N=1e5+10; struct node { long long od=1e9+10,ev=1e9+10,sz=0; }; long long par[N],sz[N],vl[N],l[N],r[N],n; long long sm=0; node dmy; node comb(node a,node b) { node c; c.sz=a.sz+b.sz; if (a.sz%2) { c.od=min(a.od,b.ev); c.ev=min(a.ev,b.od); } else { c.od=min(a.od,b.od); c.ev=min(a.ev,b.ev); } return c; } struct ST { node seg[4*N]={}; node get(int l,int r,int i=1,int st=0,int en=n-1) { if (st>=l&&en<=r) return seg[i]; if (st>r||en<l) return dmy; int mid=(st+en)/2; return comb(get(l,r,i*2,st,mid),get(l,r,i*2+1,mid+1,en)); } void update(int r,long long val,int i=1,int st=0,int en=n-1) { if (st==en) { seg[i].sz=1; seg[i].od=val; return; } int mid=(st+en)/2; if (r<=mid) update(r,val,i*2,st,mid); else update(r,val,i*2+1,mid+1,en); seg[i]=comb(seg[i*2],seg[i*2+1]); } }; int root(int n) { return (par[n]==n?n:par[n]=root(par[n])); } ST sg1,sg2; void upd(int u) { u=root(u); if (sz[u]%2) { sm-=vl[u]; node z=sg1.get(l[u],r[u]); node y=sg2.get(l[u],r[u]); long long ad=min(z.od,y.ev); sm+=ad; vl[u]=ad; } } void merge(int u,int v) { u=root(u),v=root(v); if (u==v) return; sm-=vl[u]; sm-=vl[v]; sz[u]+=sz[v]; par[v]=u; l[u]=min(l[u],l[v]); r[u]=max(r[u],r[v]); vl[u]=0; vl[v]=0; upd(u); } vector<long long> calculate_costs(vector<int> w, vector<int> a,vector<int> b, vector<int>Q) { vector<vector<int>>g; n=w.size(); for (int i=0;i<n;i++) { g.push_back ({w[i],a[i],b[i]}); par[i]=l[i]=r[i]=i; sz[i]=1; vl[i]=0; } sort(begin(g),end(g)); for (int i=0;i<n;i++) { w[i]=g[i][0],a[i]=g[i][1],b[i]=g[i][2]; vl[i]=a[i]-b[i]; sg1.update(i,a[i]-b[i]); sm+=a[i]; } for (int i=0;i<n;i++) sg2.update(i,1e9+10); // for (int j=0;j<3;j++) // { // for (int i=0;i<n;i++) // cout<<g[i][j]<<' '; // cout<<endl; // } int q=Q.size(); vector<long long>ans(q,0); vector<pair<int,int>>qu; for (int i=0;i<q;i++) qu.push_back({Q[i],i}); sort(begin(qu),end(qu)); vector<pair<int,int>>fi,se; for (int i=0;i+1<n;i++) { fi.push_back({w[i+1]-w[i],i}); if (i) se.push_back({w[i+1]-w[i-1],i}); } sort(begin(se),end(se)); sort(begin(fi),end(fi)); reverse(begin(se),end(se)); reverse(begin(fi),end(fi)); for (int i=0;i<q;i++) { int el=qu[i].first; while (fi.size()&&el>=fi.back().first) { int ind=fi.back().second; fi.pop_back(); merge(ind,ind+1); } while (se.size()&&el>=se.back().first) { int ind=se.back().second; se.pop_back(); sg2.update(ind,a[ind]-b[ind]); upd(ind); } ans[qu[i].second]=sm; } return ans; }

Compilation message (stderr)

g++: fatal error: Killed signal terminated program cc1plus
compilation terminated.