struct ArrayOut {
int low, high, sum;
ArrayOut() : low(0), high(0), sum(0) {}
ArrayOut(int aLow, int aHigh, int aSum) : low(aLow), high(aHigh), sum(aSum) {}
};
ArrayOut Find_Max_Crossing_Subarray(const vector<int>& A, int low, int mid, int high) { ... }
для i = [0..n—2)
для j = [i+1..n−1)
для k = [j+1..n)
#include <iostream>
#include <chrono>
int main()
{
using Time = std::chrono::time_point<std::chrono::high_resolution_clock>;
using Diff = std::chrono::milliseconds;
Time t1 = std::chrono::high_resolution_clock::now();
int i;
std::cin >> i;
Time t2 = std::chrono::high_resolution_clock::now();
Diff diff = std::chrono::duration_cast<Diff>(t2 - t1);
std::cout << diff.count() << " ms" << std::endl;
return 0;
}
отсортировать массив по start
текКонец := −∞ // или, например, ⌀ или 0000-01-01
текИндекс := −1
для v : массив
если v.start > текКонец
текИндекс += 1
результат[текИндекс].приклеить(v)
текКонец := макс(текКонец, v.end)
отсортировать массив по start
текКонец := −∞ // или, например, ⌀ или 0000-01-01
текИндекс := −1
для v : массив
если v.start > текКонец
текИндекс += 1
результат[текИндекс] := v
иначе
результат[текИндекс] := объединить(результат[текИндекс], v)
текКонец := макс(текКонец, v.end)
class IC { // interface
public:
virtual int getC() = 0;
virtual ~IC() = default;
};
class C : public IC {
public:
int getC() final { return 42; }
};
class B {
public:
IC* buddy() const { return fBuddy; }
void setBuddy(IC* aBuddy) { fBuddy = aBuddy; }
void someJob() const { if (fBuddy) std::cout << fBuddy->getC() << std::endl; }
private:
IC* fBuddy = nullptr;
};
class A {
public:
A() { b.setBuddy(&c); }
private:
C c;
B b;
}