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 <bits/stdc++.h>
using namespace std;
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,n1,n2) for(int i=n1;i<n2;i++)
#define speed_up    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

typedef long long int ll;
typedef pair<ll,ll> Pi;
const int INF=(ll)(1LL<<31)-1;
const ll INFl=(ll)9223372036854775807;
const int MAX=10000;
const ll MOD=(ll)1e9+7;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a, b)*b;}
//int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};

template<typename A, size_t N, typename T>
void Fill(A (&array)[N], const T &val){
    std::fill( (T*)array, (T*)(array+N), val );
}

int m,nmin,nmax;
int p[210];

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

C++: #include<iostream>
#include<algorithm>
using namespace std;
int n,a,b;
int t[100000];
int main(){

  while(cin>>n>>a>>b,n||a||b){
  for(int i=0;i<n;i++)cin>>t[i];
  int ans=0;
    sort(t,t+n);
    reverse(t,t+n);
    //cout<<t[0]:
    int ans2=0;
    for(int i=a-1;i<b;i++){
      //cout<<t[i]-t[i+1]<<endl;
      if(ans<=t[i]-t[i+1]){
        ans=t[i]-t[i+1];
        ans2=i+1;
      }
    }
    cout<<ans2<<endl;
  }
  return 0;
}

C++: #include <bits/stdc++.h>
#define ll long long
#define INF 1000000005
#define MOD 1000000007
#define EPS 1e-10
#define rep(i,n) for(int i=0;i<(int)(n);++i)
#define rrep(i,n) for(int i=(int)(n)-1;i>=0;--i)
#define srep(i,s,t) for(int i=(int)(s);i<(int)(t);++i)
#define each(a,b) for(auto& (a): (b))
#define all(v) (v).begin(),(v).end()
#define len(v) (int)(v).size()
#define zip(v) sort(all(v)),v.erase(unique(all(v)),v.end())
#define cmx(x,y) x=max(x,y)
#define cmn(x,y) x=min(x,y)
#define fi first
#define se second
#define pb push_back
#define show(x) cout<<#x<<" = "<<(x)<<endl
#define spair(p) cout<<#p<<": "<<p.fi<<" "<<p.se<<endl
#define sar(a,n) cout<<#a<<":";rep(kbrni,n)cout<<" "<<a[kbrni];cout<<endl
#define svec(v) cout<<#v<<":";rep(kbrni,v.size())cout<<" "<<v[kbrni];cout<<endl
#define svecp(v) cout<<#v<<":";each(kbrni,v)cout<<" {"<<kbrni.first<<":"<<kbrni.second<<"}";cout<<endl
#define sset(s) cout<<#s<<":";each(kbrni,s)cout<<" "<<kbrni;cout<<endl
#define smap(m) cout<<#m<<":";each(kbrni,m)cout<<" {"<<kbrni.first<<":"<<kbrni.second<<"}";cout<<endl

using namespace std;

typedef pair<int,int> P;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<double> vd;
typedef vector<P> vp;
typedef vector<string> vs;

const int MAX_N = 100005;

int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    while(1){
        int m,nmax,nmin;
        int val = 1;
        cin >> m >> nmin >> nmax;
        if(m == 0){
            break;
        }
        vector<int> vec(m);
        rep(i,m){
            cin >> vec[i];
        }
        int ans = -1;
        srep(i,nmin,nmax+1){
            if(val <= vec[i-1] - vec[i]){
                val = vec[i-1]-vec[i];
                ans = i;
            }
        }
        cout << ans << "\n";
    }
    return 0;
}

C++: #include <bits/stdc++.h>
#define rep(i, a, n) for(int i = a; i < n; i++)
using namespace std;

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

C++: #include<bits/stdc++.h>
#define rep(i,n)for(int i=0;i<n;i++)
using namespace std;

int p[200];
int main() {
	int m, s, g; scanf("%d%d%d", &m, &s, &g);
	rep(i, m)scanf("%d", &p[i]);
	sort(p, p + m, greater<>());
	int Max = 0, cnt;
	for (int i = s - 1; i < g; i++) {
		if (p[i + 1] - p[i] >= Max) {
			Max = p[i + 1] - p[i];
			cnt = i + 1;
		}
	}
	printf("%d\n", cnt);
}

C++: #include <iostream>
#include <algorithm>

using namespace std;

int main(void) {
    while (1) {
        int m, nmin, nmax;
        scanf("%d%d%d", &m, &nmin, &nmax);
        if (m == 0 && nmin == 0 && nmax == 0) break;

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

        sort(P, P + m, greater<int>());
//        for (int i = 0; i < m; ++i) {
//            cout << P[i] << endl;
//        }
        int maxgap = 0;
        int maxgapn;
        for (int i = nmin - 1; i <= nmax - 1; ++i) {
            int gap = P[i] - P[i + 1];
            if (gap >= maxgap) {
                maxgapn = i;
                maxgap = gap;
            }
        }

        cout << maxgapn + 1 << endl;
    }
    return 0;
}

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

int main(){

  int m, n_min, n_max, gap = 1000000, z;
  int ary[1000001];

  
  while(1){
    cin >> m >> n_min >> n_max;
    if(m == 0 && n_min == 0 && n_max == 0) break;

    int j = 0;
    while(m--){
      cin >> ary[j];
      j++;
    }

    for(int i = n_min ; i <= n_max ; i++){
      if(gap >= ary[i-1] - ary[i]){
	gap = ary[i-1] - ary[i];
	z = i;
      }
    }
    cout << z;
    gap = 1000000;
    z = 0;
  }

  return 0;
}

C++: #include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include<queue>
#include<set>
#include<climits>
using namespace std;

int main()
{
  while (true)
  {
    long long n = 0, min = 0, max = 0, result = 0, win = -1;
    cin >> n >> min >> max;

    if (n == 0 && min == 0 && max == 0)
      exit(0);

    vector<long long> v(n, 0);

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

    for (int i = min - 1; i < max; i++)
    {
      if (v[i] - v[i + 1] >= result)
      {
        result = v[i] - v[i + 1];
        // cout << result << endl;
        win = i;
      }
    }
    cout << win + 1 << endl;
  }

}

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

int main()
{
	int m, nmin, nmax;
	while(cin >> m >> nmin >> nmax, !(m == 0 && nmin == 0 && nmax == 0)) {
		vector<int> p(m);

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

		sort(p.begin(), p.end());
		reverse(p.begin(), p.end());

		int ans = 0, gap = -1;
		for(int i = nmax; i >= nmin; --i) {
			int g = p[i - 1] - p[i];

			if(gap < g) {
				ans = i;
				gap = g;
			}
		}

		cout << ans << endl;
	}
}