#include <iostream>
using namespace std;
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
int arr[ ] = { 1 , 1 , 1 , 2 , 2 , 4 , 5 , 7 , 7 , 8 , 8 , 9 , 10 , 10 , 10 } , n = 15 ;
// L M R
// L M R
// L M R
int binser_upper( int cari) {
// upper bound
int L = 0 , R = n- 1 , M = ( L+ R+ 1 ) / 2 ;
while ( L < R) {
if ( arr[ M] <= cari)
L = M;
else // arr[M] > cari
R = M- 1 ;
M = ( L+ R+ 1 ) / 2 ;
}
if ( arr[ L] == cari)
return L;
else
return - 1 ;
}
int binser_lower( int cari) {
// lower bound
int L = 0 , R = n- 1 , M = ( L+ R) / 2 ;
while ( L < R) {
if ( arr[ M] < cari)
L = M+ 1 ;
else // arr[M] >= cari
R = M;
M = ( L+ R) / 2 ;
}
if ( arr[ L] == cari)
return L;
else
return - 1 ;
}
int main( ) {
// binary search -> O(log(n))
int cari, banyak;
while ( cin >> cari) {
bool ada = ( binser_upper( cari) ! = - 1 ) ;
int banyak = binser_upper( cari) - binser_lower( cari) + 1 ;
cout << "Banyak angka " << cari << " adalah sebanyak " << ( ada? banyak: 0 ) << endl;
}
// linear search -> O(n)
/*
int ans = -1;
for(int i = 0; i < n; i++)
if(arr[i] == cari)
ans = i;
if(ans == -1)
cout << "Tidak ada" << endl;
else
cout << "Ada di indeks " << ans << endl;
*/
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovLyAgICAgICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAgMTIgIDEzICAxNAppbnQgYXJyW10gPSB7MSwgMSwgMSwgMiwgMiwgNCwgNSwgNywgNywgOCwgOCwgOSwgMTAsIDEwLCAxMH0sIG4gPSAxNTsKLy8gICAgICAgICAgIEwgICAgICAgICAgICAgICAgICAgIE0gICAgICAgICAgICAgICAgICAgICAgIFIKLy8gICAgICAgICAgIEwgICAgICAgIE0gICAgICAgIFIKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwgICAgICAgIE0gICAgICAgICAgICAgIFIKCmludCBiaW5zZXJfdXBwZXIoaW50IGNhcmkpIHsKCS8vIHVwcGVyIGJvdW5kCglpbnQgTCA9IDAsIFIgPSBuLTEsIE0gPSAoTCtSKzEpLzI7Cgl3aGlsZShMIDwgUikgewoJCWlmKGFycltNXSA8PSBjYXJpKQoJCQlMID0gTTsKCQllbHNlIC8vIGFycltNXSA+IGNhcmkKCQkJUiA9IE0tMTsKCQlNID0gKEwrUisxKS8yOwoJfQoJCglpZihhcnJbTF0gPT0gY2FyaSkKCQlyZXR1cm4gTDsKCWVsc2UKCQlyZXR1cm4gLTE7Cn0KCmludCBiaW5zZXJfbG93ZXIoaW50IGNhcmkpIHsKCS8vIGxvd2VyIGJvdW5kCglpbnQgTCA9IDAsIFIgPSBuLTEsIE0gPSAoTCtSKS8yOwoJd2hpbGUoTCA8IFIpIHsKCQlpZihhcnJbTV0gPCBjYXJpKQoJCQlMID0gTSsxOwoJCWVsc2UgLy8gYXJyW01dID49IGNhcmkKCQkJUiA9IE07CgkJTSA9IChMK1IpLzI7Cgl9CgkKCWlmKGFycltMXSA9PSBjYXJpKQoJCXJldHVybiBMOwoJZWxzZQoJCXJldHVybiAtMTsKfQoKaW50IG1haW4oKSB7CgkvLyBiaW5hcnkgc2VhcmNoIC0+IE8obG9nKG4pKQoJaW50IGNhcmksIGJhbnlhazsKCXdoaWxlKGNpbiA+PiBjYXJpKSB7CgkJYm9vbCBhZGEgPSAoYmluc2VyX3VwcGVyKGNhcmkpICE9IC0xKTsKCQkKCQlpbnQgYmFueWFrID0gYmluc2VyX3VwcGVyKGNhcmkpLWJpbnNlcl9sb3dlcihjYXJpKSsxOwoJCWNvdXQgPDwgIkJhbnlhayBhbmdrYSAiIDw8IGNhcmkgPDwgIiBhZGFsYWggc2ViYW55YWsgIiA8PCAoYWRhP2JhbnlhazowKSA8PCBlbmRsOwoJfQoJCgkKCS8vIGxpbmVhciBzZWFyY2ggLT4gTyhuKQoJLyoKCWludCBhbnMgPSAtMTsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJaWYoYXJyW2ldID09IGNhcmkpCgkJCWFucyA9IGk7CglpZihhbnMgPT0gLTEpCgkJY291dCA8PCAiVGlkYWsgYWRhIiA8PCBlbmRsOwoJZWxzZQoJCWNvdXQgPDwgIkFkYSBkaSBpbmRla3MgIiA8PCBhbnMgPDwgZW5kbDsKCSovCglyZXR1cm4gMDsKfQ==