Pagini recente » Cod sursa (job #3339549) | Cod sursa (job #2818722) | Diferente pentru moisil-2015/rox intre reviziile 2 si 1 | Cod sursa (job #3340399) | Cod sursa (job #3333327)
#include <fstream>
#include <vector>
std::ifstream in("arbint.in");
std::ofstream out("arbint.out");
using std::vector;
unsigned N;
struct ArbInt {
vector<unsigned> maxi;
ArbInt() {
this->maxi.reserve(N << 2);
unsigned value;
for(unsigned i = 1; i <= N; i += 1) {
in >> value;
this->write(i, value);
}
}
void write(unsigned target, unsigned value) {
unsigned left = 1, right = N, idx = 1, middle;
while(target != left || target != right) {
middle = (left + right) / 2;
if (this->maxi[idx] < value) this->maxi[idx] = value;
if (target <= middle) {
idx = idx * 2;
right = middle;
}
else {
idx = idx * 2 + 1;
left = middle + 1;
}
}
this->maxi[idx] = value;
}
unsigned read(
unsigned target_left,
unsigned target_right,
unsigned left = 1,
unsigned right = N,
unsigned idx = 1
) {
if(target_left <= left && right <= target_right) {
return this->maxi[idx];
}
const unsigned middle = (left + right) / 2;
unsigned ret = 0;
if(middle < target_left)
return ret;
}
};
int main()
{
// I made this on another pc so I had to save ;-;
return 0;
}