#include #include #include #include #include #include int melyik_nap_mennyi[30][200000]; int melyik_nap_meret[30]; using namespace std; int ketto_hatvany[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912 }; void magic(int band, int temp) { for (int i = 29; i >= 0; i--) { if (temp >= ketto_hatvany[i]) { temp -= ketto_hatvany[i]; melyik_nap_mennyi[i][melyik_nap_meret[i]] = band; melyik_nap_meret[i]++; } } } int n, k; map aktual_map; int main() { cin >> n >> k; for (int i = 0; i < 30; i++) { melyik_nap_meret[i] = 0; } int temp; for (int i = 0; i < n; i++) { scanf("%d", &temp); magic(i, temp); } /* for (int i = 0; i < 30; i++) { for (int j = 0; j < melyik_nap_meret[i]; j++) { cout << melyik_nap_mennyi[i][j] << " "; } cout << endl; } */ bool found_first = false; int result = 0; int index_ = 0; for (int i = 29; i >= 0; i--) { if (melyik_nap_meret[i] >= k) { for (int j = 0; j < melyik_nap_meret[i]; j++) { aktual_map[melyik_nap_mennyi[i][j]] = true; } result += ketto_hatvany[i]; index_ = i; break; } } for (int i = index_ - 1; i >= 0; i--) { int counter = 0; map next_aktual; if (melyik_nap_meret[i] >= k) { for (int j = 0; j < melyik_nap_meret[i]; j++) { if (aktual_map[melyik_nap_mennyi[i][j]]) { next_aktual[melyik_nap_mennyi[i][j]] = true; counter++; } } if (counter >= k) { aktual_map = next_aktual; result += ketto_hatvany[i]; } } } cout << result << endl; return 0; }