MAXimal | |
���������: 30 Oct 2008 23:24 ���������� [������] ����������� ����� � ������� ��� ���������� �������� �� O (1)����� �� ���������� ��� ������: ��������������� ����� � ����������� ���������� ����������� �������� �� O (1), ����������� ��������������� �������, � ����� ���������� �� � ������ ���������� �������� �� ���� ����������� ������������� ����� ������� ������� �� O (N). ����������� �������������� �������� ����������� ���������� �������� � ����� �� O (1), �������� ����� �� ����������� ���������� � �������� ��������� �� �����. ��� ����� ����� ������� � ����� �� ���� ��������, � ����: ������� � ������� � �����, ������� � ����� �������� � ����. ����� �������, ���� ����������� ���� ��� ������ ���, �� stack[i].second = min { stack[j].first }
j = 0..i
�������, ��� ����� ���������� �������� �� ��� ����� ����� ����������� ������ �� ������ �������� stack.top().second. ����� ��������, ��� ��� ���������� ������ �������� � ���� �������� second ����� ����� min (stack.top().second, new_element). �������� �������� �� ����� ����� �� ���������� �� �������� �� �������� �����, ��������� ��������� ������� ����� �� ��� �������� �� �������� second ��� ���������� ���������. ����������: stack< pair<int,int> > st;
����������� �������. ������ 1����� ���������� ������� ������ ����������� �������, �� ������� ��� ����������, ��� ���������������� ������� ������� ����� ������� �� ��� �������� (�.�. ��� ���������� �������� �� ������� ��� ���� ����� ����� �������� ��������, ������� �� ����� �������). ����, ��� ��� ������ ����������� �������� (������ ������� ����� ��� ��� ��� ����, ����� �������� ��������� �������, � �� ��������), ������ ���� ������ ������������� ����� ���������. ����� ���� ����� �������� � ������ � ���������� �������� � ����������� (��. ����). �������� ���� ����������� � ���, ����� ������� ������� � ������� �� ��� ��������, � ������ ������ ��� ��� ����������� ��������. � ������, ����� ������� ������������ ����� ����������� ������������������ ����� (�.�. � ������ �������� ���������� ��������), ������, ����������, �� ������������, � ������ ���������� �������. ����� ������� �� ���� ������� ������ ����� �������� ������ � ���������. ����� ����������� ������ �������� � ������� ���������� ���������� "������": ���� � ������ ������� ��������� �������, ������� ������ ��������, ����� ������� ���� ������� �� �������; ����� ������� ����� ������� � ����� �������. ��� ����� ��, � ����� �������, �� ������� �������, � � ������ �������, �� �������� ������� �������, ���� �� �� �����-���� ����������� ���� �������� ���������. �� ��� ���������� �������� �� ������ ������� ��� ���, ������ ������, ����� ��� �� ��������� - ���� ���������������� ������� ����� �������� ���� ������� � �������� ������������. ������� ��� �������� �������� ��� ���� ����� �������� ������������ �������� - ���� ������� � ���� ��������� ��������� � ������ �������, �� ��������� ���; ����� ������ ������ �� ������. ���������� ���������� ������������� ��������: deque<int> q;
�������, ��� � ������� ����� ���������� ���� ���� �������� ���� O (1). ����������� �������. ������ 2���������� ����� ������ ������ ����������� ������� ��� ���������� �������� �� O (1), ������� ��������� ����� ������ ��� ����������, ������ ����� ��������� ���������� ����������� ������: ��� �������� ������� ������� ����������� � ���, �, � ���������, ��� ���������� �������� �� ��������� ����� ��� ��������. ���� ����������� � ���, ����� ������ ������ � ������ �� ������, ������� ��� ���� ���� ������. �������� ������������ ������� � ������� ���� ������. ������ ��� �����: s1 � s2; ����������, ������� � ���� �����, ���������������� ��� ���������� �������� �� O (1). ��������� ����� �������� ����� ������ � ���� s1, � ��������� �������� - ������ �� ����� s2. ��� ����, ���� ��� ������� ���������� �������� �� ����� s2 �� �������� ������, ������ �������� ��� �������� �� ����� s1 � ���� s2 (��� ���� �������� � ����� s2 ��������� ��� � �������� �������, ��� ��� � ����� ��� ���������� ���������; ���� s1 �� ������ ������). �������, ���������� �������� � ������� ����� ���������� ����������� � ���������� �������� �� �������� � ����� s1 � �������� � ����� s2. ��� �����, �� ��������� ��� �������� ��-�������� �� O (1) (�� ��� ������� �������, ��� ������ ������� � ������ ������ 1 ��� ����������� � ���� s1, 1 ��� ����������� � ���� s2 � 1 ��� ����������� �� ����� s2). ����������: stack< pair<int,int> > s1, s2;
������ ���������� �������� �� ���� ����������� ������������� ����� ������� ������������ ��� ������ A ����� N, � ���� ����� M ≤ N. ��������� ����� ������� � ������ ���������� ����� M ������� �������, �.�. �����: min A[i], min A[i], min A[i], ..., min A[i] 0≤i≤M-1 1≤i≤M 2≤i≤M+1 N-M≤i≤N-1 ����� ��� ������ �� �������� �����, �.�. O (N). ��� ����� ���������� ������� �������, ���������������� ��� ���������� �������� �� O (1), ��� ���� ����������� ���� ����, ������ � ������ ������ ������� ����� �� ���� ������� ���������� ����� �������. ����� ������� ��� �������: ������� � ������� ������ M ��������� �������, ����� � ��� ������� � ������� ���, ����� ������� � ������� ��������� �������, � �������� �� �� ������ ������� �������, ����� ������� �������, � �.�. ��������� ��� �������� � �������� ����������� � ������� �� ����������� �����, �� � ����������� ����� ��������� ��������� O (N). ����� ��������, ��� ���������� ���������������� ������� ������ ������� �����, ������ ��� ��, ��������, ����������� ������� ���� ������ (��������� �� i-�� ���� ����������� ����� i-�� � (i-M)-�� �������� �������). ��� ���������� ������� ������ ������� ������ A ������� ���� �� ����������� - ������ �������� ���������, i-�� ������� �������.
| |