/Ребус
#include<conio.h>
#include<iostream.h>
void main()
{ *int i,j,r;
* long int buk,slo,a[8];
* clrscr();
* for(a[0]=1; a[0]<=3; a[0]++)
* *for(a[1]=0; a[1]<=9; a[1]++)
* * for(a[2]=0; a[2]<=9; a[2]++)
* * *for(a[3]=0; a[3]<=9; a[3]++)
* * * for(a[4]=0; a[4]<=9; a[4]++)
for(a[5]=1; a[5]<=9; a[5]++)
for(a[6]=0; a[6]<=9; a[6]++)
*for(a[7]=0; a[7]<=9; a[7]++)
* * { *buk=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];
slo=a[5]*10000+a[6]*1000+a[7]*100+a[3]*10+a[7];
* *if(buk*3==slo)
* *{ r=0; * * * * * * * * * //Проверка того, что
* * *for(i=0; i<8; i++) * * //разным буквам соответствуют
for(j=i+1; j<8; j++) *//разные цифры
*if(a[i]==a[j]) r++;
*if(r==0)cout<<buk<<" + "
* * <<buk<<" + "
* * <<buk<<" = "
* * <<slo<<endl;
* *}
* * *}
getch();
Дерево Фенвика для массива A можно себе представлять так, как изображено на прикрепленном рисунке. В вершине, помеченной числом i, хранится сумма A[i] и всех элементов массива A с индексами, которые записаны в левом поддереве вершины i. Например, Fenwick[11] = A[8] + A[9] + A[10] + A[11]. Дерево Фенвика устроено так, чтобы в каждой вершине Fenwick[n] хранилась сумма отрезка массива от некоторого F(n) до n, нужно сообразить, чему равно F(n). F(n) получается, если идти по дереву в левые поддеревья, пока не наткнёмся на лист, он помечен чётным числом. Если двоичная запись числа n оканчивается на k единиц, то в F(n) эти k единиц заменены на нули.
Пусть нужно вычислить сумму префикса A[0..n], например, n = 9. Глядя на дерево, можно сообразить, что эта сумма равна (A[0] + A[1] + ... + A[7]) + (A[8] + A[9)) = Fenwick[7] + Fenwick[9]. В такой сумме обязательно есть Fenwick[n]: A[0] + A[1] + ... + A[n] = (A[0] + ... + A[F(n) - 1]) + (A[F(n)] + ... + A[n]) = (A[0] + ... + A[F(n) - 1]) + Fenwick[n]. Сумму в скобках тоже можно представить в виде суммы Fenwick[...].
Обновление значения A[n] приводит к обновлению некоторых Fenwick[k], а именно, Fenwick[n], и затем всех вершин-родителей, для которых текущая вершина является левым потомком. Например, чтобы обновить A[9], придется обновить Fenwick[9] и Fenwick[11]. Посчитано, что если текущая вершина имеет номер k, то следующая имеет номер k | (k + 1), и так далее, пока не кончатся вершины.
Высота дерева O(log n), так что операции нахождения суммы и обновления элементов работают за O(log n).
Поделитесь своими знаниями, ответьте на вопрос:
2 вопроса с вопросами, тольк опытные) Сжатие какой информации происходит без потерь? А. Фотографии (*.jpg), В. Тексты, С. Программы, D. Звук (*.mp3), Е. Видео(*.mpg), F. Данные Удаление какого объекта не приведёт к нежелательным последствиям? A. Папки B. Ярлыка C. Файла D. Программы
Сжатие какой информации происходит без потерь?
ответ : F. Данные
Удаление какого объекта не приведёт к нежелательным последствиям?
ответ : A. Папки