Important caveat: since D&C uses progressive splitting of tasks into sub-tasks, and since merging is an essential step of D&C, it makes no sense to start with N algorithm states.
Instead, this schedule should start with a single algorithm state and a single data specification, and progressively splitting and subsequently merging them.
template <typename TSpec> struct DivideAndConquer; template <typename TString, typename TSpec> struct DataSpec<Independent1D<TString, DivideAndConquer<TSpec> > > : DataSpec<Independent1D<TString, void> > { typedef DataSpec<Independent1D<TString, void> > TBase; typedef typename Iterator<TBase>::Type TIterator; }; template <typename TString, typename TSpec> inline void split( String<DataSpec<Independent1D<TString, DivideAndConquer<TSpec> > > >& specs, DataSpec<Independent1D<TString, DivideAndConquer<TSpec> > > const& spec ); template <typename TString, typename TSpec, typename TDataSpec> inline void split( String<AlgorithmState<TSpec> >& states, AlgorithmState<TSpec> const& state, DataSpec<TDataSpec> const& spec ); template <typename TString, typename TSpec> inline void merge( DataSpec<Independent1D<TString, DivideAndConquer<TSpec> > >& spec, String<DataSpec<Independent1D<TString, DivideAndConquer<TSpec> > > > const& specs ); template <typename TString, typename TSpec> inline void merge( AlgorithmState<TSpec>& state, String<AlgorithmState<TSpec> > const& states ); template <typename TString, typename TSpec> inline bool isLeaf( DataSpec<Independent1D<TString, DivideAndConquer<TSpec> > > const& spec );