#include #include #include using namespace std; int days = 0; int money = 0; int prices[70000]; int * find_max(int * s, int * e) { int max = *s; int * mp = s; while(s != e) { if(*s > max) { max = *s; mp = s;} s++; } return mp; } int * find_min(int * s, int * e) { int min = *s; int * mp = s; while(s != e) { if(*s < min) { min = *s; mp = s;} s++; } return mp; } int get_earn(int * s, int * e) { int * act = s; int min = *s; int max = *s; int * amin = s; int * amax = s; int * lmin = (int *)0; int * lmax = (int *)0; while(act != e) { if(*act < min) { min = *act; amin = act;} if(*act > max) { max = *act; amax = act;} act++; } //cout << "OK" << endl; if(amin > amax){ //cout << "treba riesit" << endl; lmin = find_min(s, amax); int INT1 = money/(*lmin) * (*amax - *lmin); lmax = find_max(amin, e); int INT2 = money/(*amin) * (*lmax - *amin); int INT3 = get_earn(amax, amin); //cout << "INT1 == " << INT1 << endl; //cout << "INT2 == " << INT2 << endl; //cout << "INT3 == " << INT3 << endl; if(INT1 > INT2) if(INT1 > INT3) return INT1; else return INT3; else if(INT2 > INT3) return INT2; else return INT3; } else { //cout << "OK - ok" << endl; //cout << "min == " << *amin << endl; //cout << "max == " << *amax << endl; return (money/(*amin) * (*amax - *amin)); } } int main(){ int i = 0; int * p = prices; while(true) { cin >> days; if(days == 0) break; cin >> money; for(i = 0; i < days - 1; i++) { cin >> *p; p++; } scanf("%d\n", p); // ---------------------------------------------- cout << get_earn(prices, prices + days) << endl; // ---------------------------------------------- p = prices; /*for(i = 0; i < days; i++) cout << prices[i] << " "; cout << endl;*/ } return 0; }