Go: /*
	http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1600&lang=jp
	Entrance Examination
*/

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

// 標準入力を取得するScannerのインスタンスを作成
var scanner = bufio.NewScanner(os.Stdin)

// 標準入力で各行を読み込みintとして返す

func readLine() int {
	if scanner.Scan() {
		number, _ := strconv.Atoi(scanner.Text())
		return number
	}
	return 0
}

func main() {
	// 改行から空白区切りに変更
	scanner.Split(bufio.ScanWords)

	// 0 0 0の行に到達するまでループする
	for {
		// 合格者、不合格者の境目=ギャップ
		m := readLine()   // 受験者の人数
		min := readLine() // 合格者の最小人数
		max := readLine() // 合格者の最大人数

		// 0 0 0の行に到達したのでループを抜け終了する
		if m == 0 && min == 0 && max == 0 {
			break
		}

		// 得点を格納するsliceを初期化
		ps := make([]int, 0, m)

		// sliceに得点を格納する
		for i := 0; i < m; i++ {
			ps = append(ps, readLine())
		}

		tmp := 0    // ギャップを一時的に保存
		gap := 0    // ギャップの最大値を保存
		answer := 0 // ギャップが最大になった時のindex(合格人数)を保存

		// 合格者の最小人数〜最大人数のギャップを計算する
		for i := min; i <= max; i++ {
			tmp = ps[i-1] - ps[i]

			// ギャップの最大値が更新された場合、最大値と合格人数を更新する
			// ギャップが同じ値だった場合も合格人数を更新する
			// (合格人数が多い方が優先されるので後から現れた値が優先される)
			if tmp >= gap {
				gap = tmp
				answer = i
			}
		}
		fmt.Println(answer)
	}
}

C++: #include<stdio.h>

int p[201];
int gap = -1;
int ans = -1;
int main(){
    int m, n_min, n_max;
    for(;;){
        scanf("%d %d %d\n",&m, &n_min, &n_max);
        if(m == 0 && n_max == 0 && n_min == 0) break;
        for(int i=1; i<=m; i++){
            scanf("%d\n",&p[i]);
        }
        for(int border = n_min; border <= n_max; border++){
            if(gap <= p[border] - p[border+1]){
                gap = p[border] - p[border+1];
                ans = border;
            }
        }
        printf("%d\n",ans);
        ans = -1;
        gap = -1;
    }
    return 0;
}

C++: #pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define all(x) x.begin(),x.end()
const long double PI = acos(-1.0L);
const long long MOD = 1000000007LL;
// const long long MOD = 998244353LL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
template<class T> inline bool chmax(T &a, T b) { if (a < b) { a = b; return true;} return false; }
template<class T> inline bool chmin(T &a, T b) { if (a > b) { a = b; return true;} return false; }
///////////////////////////////////////////////////////////////////////////////////////////////////

int main() {
    ios::sync_with_stdio(false); cin.tie(nullptr);
    while (1) {
		int m,nmin,nmax; cin >> m >> nmin >> nmax;
		if (m+nmin+nmax==0) break;
		vector<int> P(m);
		rep(i,m) cin >> P[i];

		int gap = 0;
		int ans = 0;
		for (int i = nmax-1; i >= nmin-1; i--) {
			if (chmax(gap,P[i]-P[i+1])) ans = i; 
		}

		cout << ans+1 << endl;
	}
}

C++: //inlclude before define 
#define _USE_MATH_DEFINES

//include
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<cmath>
#include<type_traits>
#include<numeric>
#include<deque>
#include<iomanip>
#include<set>
#include<unordered_set>
#include<tuple>
#include<map>
#include<memory>

using namespace std;

//typedef
typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<char> VC;
typedef vector<double> VD;
typedef pair<int, int> P1;
typedef long long int ll;

//number
#define INF 1e9
#define NUM 1000000007

//itr
#define all(x) begin(x),end(x)

//repeat
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define REP(i,a,b) for(int i=int(a);i<int(b);i++)

//max,min
#define chmin(a,b) a=min((a),(b))
#define chmax(a,b) a=max((a),(b))

//function

/*ll gcd(ll a, ll b) {
	if (b == 0) return a;
	else return gcd(b, a%b);
}*/

/*ll lcm(ll a,ll b) {
	ll g = gcd(a, b);
	retur5n a * (b / g);
}*/

int dig(int a) {
	int sum = 0;
	while (a) {
		sum += a % 10;
		a /= 10;
	}
	return sum;
}

//grid template
int x[] = { -1, 0, 1, 0 };
int y[] = { 0,-1,0,1 };
int xx[] = { -1,-1,1,1 };
int yy[] = { 1,-1,1,-1 };

int main() {
	int m, nmin, nmax;
	while (true) {
		cin >> m >> nmin >> nmax;
		if (m == 0 && nmax == 0 && nmin == 0) {
			return 0;
		}

		VI p(m);
		rep(i, m) cin >> p[i];

		int ans = 0, maxv = -1;
		for (int i = nmin; i <= nmax; i++) {
			int div = p[i - 1] - p[i];
			if (max(div, maxv) == div || div==maxv) {
				//cout << div << " " << i << endl;
				maxv = div;
				ans = i;
			}
		}
		cout << ans << endl;

	}
	return 0;
}

C++: #include <iostream>
#include <algorithm>
using namespace std;

int m, a, b, p[200], ans;

int main() {
	while (true) {
		cin >> m >> a >> b;
		if (m == 0)break;
		for (int i = 0; i < m; i++) {
			cin >> p[i];
		}
		sort(p, p + m);

		/*cout << "m:" << m << " a:" << a << " b:" << b << endl;
		for (int i = 0; i < m; i++) {
			cout << p[i] << " ";
		}
		cout << endl;*/

		int ans = 0, maxnum = 0;
		for (int i = a; i <= b; i++) {
			//cout << "i:" << i << " p[m-i]:" << p[m-i] << endl;
			if (maxnum <= p[m - i]-p[m - (i + 1)]) {
				maxnum = p[m - i] - p[m - (i + 1)];
				ans = i;
			}
		}

		cout << ans << endl;
	}
}

C++: #include <iostream>
#include <vector>
using namespace std;

int main() {
    int m, nmin, nmax;
    while(cin >> m >> nmin >> nmax, m) {
        vector<int> p(m);
        for(int i=0; i<m; ++i) {
            cin >> p[i];
        }
        int gap = 0;
        int res = 0;
        for(int i=nmax-1; i>=nmin-1 && i+1<m; --i) {
            if(gap < p[i] - p[i+1]) {
                gap = p[i] - p[i+1];
                res = i+1;
            }
        }
        cout << res << endl;
    }
}

C++: #include <stdio.h>
int main(){
	int m,a,b,x,y,r,g,i;
	for(;scanf("%d%d%d%d",&m,&a,&b,&x)>3;){
		for(g=0,i=1;i<m;i++){
			scanf("%d",&y);
			if(a<=i&&i<=b && x-y>=g)g=x-y,r=i;
			x=y;
		}
		printf("%d\n",r);
	}
	return 0;
}

C++: #include<iostream>
#include<string>
using namespace std;

int main(){

  int m,a,b,t=0,s;

  while(cin>>m>>a>>b){
    t=0;
    if(m==0){
      break;
    }

  int p[m];
  for(int i=0;i<m;i++){
    cin>>p[i];
  }

  for(int i=a;i<=b;i++){
    if(t<=p[i-1]-p[i]){
      t=p[i-1]-p[i];
      s=i;
    }
  }
  

  cout<<s<<endl;

  }

  return 0;
}

C++: #include <bits/stdc++.h>

using namespace std;

int main()
{
  int m, n[2];
  while(cin >> m >> n[0] >> n[1], m || n[0] || n[1]){
    int P[200];
    for(int i = 0; i < m; i++) cin >> P[i];
    int idx = n[0];
    for(int i = n[0]; i <= n[1]; i++){
      if(P[i-1] - P[i] >= P[idx-1] - P[idx]) idx = i;
    }
    cout << idx << endl;
  }
  return 0;
}