#include <vector>
#include <cmath>
#include <iostream>
class FloodIsolation {
public:
FloodIsolation() :
h(0),
floodedCells(0),
floodedCellsTimeInterval(0),
qInflow(0),
qStartTime(0),
qEndTime(0),
lowerFloorCells(0),
cellLocationX(0),
cellLocationY(0),
cellLocationZ(0),
levelOfCell(0),
valueOfCellIds(0),
h0(0),
vU(0),
vV(0),
vUh(0),
vVh(0),
vUh0(0),
vVh0(0),
ghh(0),
sfx(0),
sfy(0),
qIn(0),
typeInterface(nEdges, 0),
neighborIds(nEdges, 0)
{
}
~FloodIsolation(){
}
void Update() {
h = h + 1;
floodedCells = !floodedCells;
floodedCellsTimeInterval = !floodedCellsTimeInterval;
qInflow = qInflow + 1;
qStartTime = qStartTime + 1;
qEndTime = qEndTime + 1;
lowerFloorCells = lowerFloorCells + 1;
cellLocationX = cellLocationX + 1;
cellLocationY = cellLocationY + 1;
cellLocationZ = cellLocationZ + 1;
levelOfCell = levelOfCell + 1;
valueOfCellIds = valueOfCellIds + 1;
h0 = h0 + 1;
vU = vU + 1;
vV = vV + 1;
vUh = vUh + 1;
vVh = vVh + 1;
vUh0 = vUh0 + 1;
vVh0 = vVh0 + 1;
ghh = ghh + 1;
sfx = sfx + 1;
sfy = sfy + 1;
qIn = qIn + 1;
for(int j = 0; j < nEdges; ++j) {
++typeInterface[j];
++neighborIds[j];
}
}
private:
static const int nEdges = 6;
bool floodedCells;
bool floodedCellsTimeInterval;
std::vector<int> neighborIds;
double valueOfCellIds;
double h;
double h0;
double vU;
double vV;
double vUh;
double vVh;
double vUh0;
double vVh0;
double ghh;
double sfx;
double sfy;
double qInflow;
double qStartTime;
double qEndTime;
double qIn;
double nx;
double ny;
double floorLevels;
int lowerFloorCells;
bool flagInterface;
std::vector<int> typeInterface;
bool floorCompleteleyFilled;
double cellLocationX;
double cellLocationY;
double cellLocationZ;
int levelOfCell;
};
int main() {
std::vector<FloodIsolation> isolation(20000);
clock_t start = clock();
for (int i = 0; i < 400; ++i) {
if(i % 100 == 0) {
std::cout << i << "\n";
}
for (auto &f : isolation)
f.Update();
}
clock_t stop = clock();
std::cout << "Time: " << difftime(stop, start) / 1000 << "\n";
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8aW9zdHJlYW0+CgoKCmNsYXNzIEZsb29kSXNvbGF0aW9uIHsKcHVibGljOgogICAgRmxvb2RJc29sYXRpb24oKSA6CiAgICAgICAgICAgIGgoMCksCiAgICAgICAgICAgIGZsb29kZWRDZWxscygwKSwKICAgICAgICAgICAgZmxvb2RlZENlbGxzVGltZUludGVydmFsKDApLAogICAgICAgICAgICBxSW5mbG93KDApLAogICAgICAgICAgICBxU3RhcnRUaW1lKDApLAogICAgICAgICAgICBxRW5kVGltZSgwKSwKICAgICAgICAgICAgbG93ZXJGbG9vckNlbGxzKDApLAogICAgICAgICAgICBjZWxsTG9jYXRpb25YKDApLAogICAgICAgICAgICBjZWxsTG9jYXRpb25ZKDApLAogICAgICAgICAgICBjZWxsTG9jYXRpb25aKDApLAogICAgICAgICAgICBsZXZlbE9mQ2VsbCgwKSwKICAgICAgICAgICAgdmFsdWVPZkNlbGxJZHMoMCksCiAgICAgICAgICAgIGgwKDApLAogICAgICAgICAgICB2VSgwKSwKICAgICAgICAgICAgdlYoMCksCiAgICAgICAgICAgIHZVaCgwKSwKICAgICAgICAgICAgdlZoKDApLAogICAgICAgICAgICB2VWgwKDApLAogICAgICAgICAgICB2VmgwKDApLAogICAgICAgICAgICBnaGgoMCksCiAgICAgICAgICAgIHNmeCgwKSwKICAgICAgICAgICAgc2Z5KDApLAogICAgICAgICAgICBxSW4oMCksCiAgICAgICAgICAgIHR5cGVJbnRlcmZhY2UobkVkZ2VzLCAwKSwKICAgICAgICAgICAgbmVpZ2hib3JJZHMobkVkZ2VzLCAwKQogICAgewogICAgfQoKICAgIH5GbG9vZElzb2xhdGlvbigpewogICAgfQoKICAgIHZvaWQgVXBkYXRlKCkgewogICAgICAgIGggPSAgaCArIDE7CiAgICAgICAgZmxvb2RlZENlbGxzID0gICFmbG9vZGVkQ2VsbHM7CiAgICAgICAgZmxvb2RlZENlbGxzVGltZUludGVydmFsID0gICFmbG9vZGVkQ2VsbHNUaW1lSW50ZXJ2YWw7CiAgICAgICAgcUluZmxvdyA9ICBxSW5mbG93ICsgMTsKICAgICAgICBxU3RhcnRUaW1lID0gIHFTdGFydFRpbWUgKyAxOwogICAgICAgIHFFbmRUaW1lID0gIHFFbmRUaW1lICsgMTsKICAgICAgICBsb3dlckZsb29yQ2VsbHMgPSAgbG93ZXJGbG9vckNlbGxzICsgMTsKICAgICAgICBjZWxsTG9jYXRpb25YID0gIGNlbGxMb2NhdGlvblggKyAxOwogICAgICAgIGNlbGxMb2NhdGlvblkgPSAgY2VsbExvY2F0aW9uWSArIDE7CiAgICAgICAgY2VsbExvY2F0aW9uWiA9ICBjZWxsTG9jYXRpb25aICsgMTsKICAgICAgICBsZXZlbE9mQ2VsbCA9ICBsZXZlbE9mQ2VsbCArIDE7CiAgICAgICAgdmFsdWVPZkNlbGxJZHMgPSAgdmFsdWVPZkNlbGxJZHMgKyAxOwogICAgICAgIGgwID0gIGgwICsgMTsKICAgICAgICB2VSA9ICB2VSArIDE7CiAgICAgICAgdlYgPSAgdlYgKyAxOwogICAgICAgIHZVaCA9ICB2VWggKyAxOwogICAgICAgIHZWaCA9ICB2VmggKyAxOwogICAgICAgIHZVaDAgPSAgdlVoMCArIDE7CiAgICAgICAgdlZoMCA9ICB2VmgwICsgMTsKICAgICAgICBnaGggPSAgZ2hoICsgMTsKICAgICAgICBzZnggPSAgc2Z4ICsgMTsKICAgICAgICBzZnkgPSAgc2Z5ICsgMTsKICAgICAgICBxSW4gPSAgcUluICsgMTsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbkVkZ2VzOyArK2opIHsKICAgICAgICAgICAgKyt0eXBlSW50ZXJmYWNlW2pdOwogICAgICAgICAgICArK25laWdoYm9ySWRzW2pdOwogICAgICAgIH0gICAgICAgCiAgICB9Cgpwcml2YXRlOgoKICAgIHN0YXRpYyBjb25zdCBpbnQgbkVkZ2VzID0gNjsKICAgIGJvb2wgZmxvb2RlZENlbGxzOwogICAgYm9vbCBmbG9vZGVkQ2VsbHNUaW1lSW50ZXJ2YWw7CgogICAgc3RkOjp2ZWN0b3I8aW50PiBuZWlnaGJvcklkczsKICAgIGRvdWJsZSB2YWx1ZU9mQ2VsbElkczsKICAgIGRvdWJsZSBoOwogICAgZG91YmxlIGgwOwogICAgZG91YmxlIHZVOwogICAgZG91YmxlIHZWOwogICAgZG91YmxlIHZVaDsKICAgIGRvdWJsZSB2Vmg7CiAgICBkb3VibGUgdlVoMDsKICAgIGRvdWJsZSB2VmgwOwogICAgZG91YmxlIGdoaDsKICAgIGRvdWJsZSBzZng7CiAgICBkb3VibGUgc2Z5OwogICAgZG91YmxlIHFJbmZsb3c7CiAgICBkb3VibGUgcVN0YXJ0VGltZTsKICAgIGRvdWJsZSBxRW5kVGltZTsKICAgIGRvdWJsZSBxSW47CiAgICBkb3VibGUgbng7CiAgICBkb3VibGUgbnk7CiAgICBkb3VibGUgZmxvb3JMZXZlbHM7CiAgICBpbnQgbG93ZXJGbG9vckNlbGxzOwogICAgYm9vbCBmbGFnSW50ZXJmYWNlOwogICAgc3RkOjp2ZWN0b3I8aW50PiB0eXBlSW50ZXJmYWNlOwogICAgYm9vbCBmbG9vckNvbXBsZXRlbGV5RmlsbGVkOwogICAgZG91YmxlIGNlbGxMb2NhdGlvblg7CiAgICBkb3VibGUgY2VsbExvY2F0aW9uWTsKICAgIGRvdWJsZSBjZWxsTG9jYXRpb25aOwogICAgaW50IGxldmVsT2ZDZWxsOwp9OwoKaW50IG1haW4oKSB7CiAgICBzdGQ6OnZlY3RvcjxGbG9vZElzb2xhdGlvbj4gaXNvbGF0aW9uKDIwMDAwKTsKICAgIGNsb2NrX3Qgc3RhcnQgPSBjbG9jaygpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0MDA7ICsraSkgewogICAgICAgIGlmKGkgJSAxMDAgPT0gMCkgewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgaSA8PCAiXG4iOwogICAgICAgIH0KCiAgICAgICAgZm9yIChhdXRvICZmIDogaXNvbGF0aW9uKQogICAgICAgICAgICBmLlVwZGF0ZSgpOwogICAgfQogICAgY2xvY2tfdCBzdG9wID0gY2xvY2soKTsKICAgIHN0ZDo6Y291dCA8PCAiVGltZTogIiA8PCBkaWZmdGltZShzdG9wLCBzdGFydCkgLyAxMDAwIDw8ICJcbiI7Cn0=