Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Bag::add(TElem elem) {
- if (length == capacity) {
- capacity = capacity + 5;
- TElem* newb = new TElem[this->capacity];
- for (int i = 0; i < this->length; ++i) {
- newb[i] = this->b[i];
- }
- delete[] this->b;
- b = newb;
- }
- if (min_num == INT_MAX) {
- min_num = elem;
- max_num = elem;
- b[0] = 1;
- length++;
- bagsize++;
- }
- else if (elem > max_num) {
- int dif = elem - min_num;
- int dif2 = elem - max_num;
- max_num = elem;
- if (max_num - min_num + 1 >= capacity) {
- capacity = dif + 5;
- TElem* newb = new TElem[capacity];
- for (int i = 0; i < length; ++i) {
- newb[i] = b[i];
- }
- delete[] b;
- b = newb;
- for (int i = length; i < capacity; ++i)
- b[i] = 0;
- }
- b[dif] = 1;
- bagsize++;
- length += dif2;
- }
- else if (elem < min_num) {
- int dif = min_num - elem;
- min_num = elem;
- if (max_num - min_num + 1 >= capacity) {
- capacity = max_num - min_num + 5;
- TElem* newb = new TElem[capacity];
- for (int i = 0; i < length; ++i) {
- newb[i] = b[i];
- }
- delete[] b;
- b = newb;
- for (int i = length; i < capacity; ++i)
- b[i] = 0;
- }
- for (int i = 0; i < dif; ++i) {
- length++;
- for (int j = length; j > 0; j--)
- b[j] = b[j - 1];
- }
- for (int i = 1; i < dif; ++i)
- b[i] = 0;
- b[0] = 1;
- bagsize++;
- }
- else {
- int dif = elem - min_num;
- b[dif]++;
- bagsize++;
- }
- /*
- if (bagsize == 500){
- cout << "MINIM: " << min_num << " " << "MAXIM: " << max_num << '\n';
- for (int i = 0; i < length; ++i)
- cout << b[i] << " ";
- cout << '\n';
- }
- */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement