Submission #133767

#TimeUsernameProblemLanguageResultExecution timeMemory
133767dorijanlendvajMeetings (IOI18_meetings)C++14
Compilation error
0 ms0 KiB
#include "meetings.h"
#include <bits/stdc++.h>
#define x first
#define y second
#define pii pair<int,int>
#define pb push_back
#define ll long long
#define vi vector<int>
#define vl vector<ll>
#pragma GCC optimize("unroll-loops")
using namespace std;
const int N=750010,M=1<<20,MOD=1000000007;
const char en='\n';
const ll LLINF=1ll<<60;

struct no
{
	int lon=0,pref=0,suf=0;
	int sz=1;
};

no merge(no a,no b)
{
	no x;
	x.sz=a.sz+b.sz;
	x.lon=max(a.lon,b.lon);
	x.lon=max(x.lon,a.suf+b.pref);
	if (a.pref==a.sz) x.pref=a.pref+b.pref;
	else x.pref=a.pref;
	if (b.suf==b.sz) x.suf=a.suf+b.suf;
	else x.suf=b.suf;
	return x;
}

no seg[M+N];

no get(int l,int r,int lo=0,int hi=M,int i=1)
{
	if (lo>=l && hi<=r) return seg[i];
	if (lo>=r || hi<=l) return seg[0];
	int mid=(lo+hi)/2;
	return merge(get(l,r,lo,mid,i*2),get(l,r,mid,hi,i*2+1));
}

vl minimum_costs(vi H, vi L, vi R) {
	vi h=H,l=L,r=R;
	int n=h.size(),q=l.size();
	for (int i=0;i<n;++i) seg[i+M].lon=seg[i+M].pref=seg[i+M].suf=h[i]==1;
	//cout<<"in1 done"<<endl;
	for (int i=M-1;i>0;--i) if (i*2+1<M+N) seg[i]=merge(seg[i*2],seg[i*2+1]);
	vl ans;
	for (int i=0;i<q;++i) ans.pb((r[i]-l[i]+1)*2-get(l[i],r[i]+1).lon);
	return ans;
}

Compilation message (stderr)

Compilation timeout while compiling meetings