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 <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
  while (true) {
    int m, nmin, nmax;
    cin >> m >> nmin >> nmax;

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

    sort(P.begin(), P.end());

    int maxgap = 0;
    int maxidx = 0;
    for (int i = m - nmax; i <= m - nmin; i++) {
      int gap = P[i] - P[i - 1];
      if (gap > maxgap) {
	maxgap = gap;
	maxidx = i;
      }
    }

    cout << m - maxidx << endl;
  }
}

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

#define ll long long

using namespace std;


int m,Nmin,Nmax;

int P[205]={};
int ans;

int main(){

    while(1){
        scanf("%d %d %d",&m,&Nmin, &Nmax);
        if(m == 0 && Nmin == 0 && Nmax == 0) break;

        for(int i=0;i<m;i++){
            scanf("%d",&P[i]);
        }
        int max_gap;

        for(int i=Nmin-1;i<Nmax;i++){
            int gap = P[i] - P[i+1];
            if(max_gap < gap){
                max_gap = gap;
                ans = i+1;
            }
        }
        printf("%d\n",ans);
    }


}

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

int main() {
  int n, left, right;
  vector<int> p;

  while (cin >> n >> left >> right, n) {
    p.resize(n);
    rep (i, n) cin >> p[i];

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

    int n_passed = 0;
    int max_gap = 0;

    rep (i, n-1) {
      // cout << "i: " << i << endl;
      if (! (left <= i+1 && i+1 <= right) ) continue;
      // cout << "passed " << i+1 << " students (lowest: " << left << ", highest: " << right << ")" << endl;
      // cout << "current gap: " << p[i] - p[i+1] << endl;

      if (max_gap <= p[i] - p[i+1]) {
        // cout << "new gap: " << p[i] - p[i+1] << endl;
        // cout << left << ", " << i+1 << ", " << right << endl;
        // cout << "update" << endl;
        n_passed = i+1;
        max_gap = p[i] - p[i+1];
      }
    }
    cout << n_passed << endl;
  }
  return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;
int main(void){
    // Your code here!
    while (true){
        int m,a,b;
        cin >> m >> a >> b;
        if (m==0 && a==0 && b==0) break;
        vector<int> n(m);
        for (int i=0;i<m;i++){
            cin >> n.at(i);
        }
        int u=0,ans=0;
        for (int i=a-1;i<b;i++){
            if (n.at(i)-n.at(i+1)>=u) {u=n.at(i)-n.at(i+1);ans=i+1;}
        }
        cout << ans << endl;
    }
}

C++: #include<bits/stdc++.h>
using namespace std;

int main(){
  while(1){
      int m,nmin,nmax,max,ans=0,ansp=0;
  int p[201];
  cin>>m>>nmin>>nmax;
  if(m+nmin+nmax==0) break;
  for(int i=0;i<m;i++)cin>>p[i];
  sort(p,p+m);
  for(int i=nmin;i<=nmax;i++){
    max=p[m-i]-p[m-i-1];
    if(ans<=max)ans=max,ansp=i;
  }
  cout<<ansp<<endl;
  }
  return 0;
}

C++: #include<iostream>
using namespace std;
int main(){
	while(1){
		int m,n,N,ans=0,now,last=0,out;
		cin >> m >> n >> N;
		if(!m&&!n&&!N)	break;
		for(int i=1;i<=m;i++){
			cin >> now;
			if(n<i&&i<=N+1&&i!=1){
				if((last-now)>=ans){
					ans = last-now;
					out = i-1;
				}
			}
			last = now;	
		}
		cout << out << endl;
	}
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
#define REP(i, a, n) for(int i = (a); i < (n); i++)
using namespace std;
typedef pair<int, int> PII;

int M, NMIN, NMAX, P[200];

int main(void) {
  while(cin >> M >> NMIN >> NMAX, M) {
    REP(i, 0, M) cin >> P[i];

    vector<PII> vec;
    REP(i, NMIN, NMAX + 1) vec.push_back(PII(P[i - 1] - P[i], i));
    sort(vec.begin(), vec.end());
    reverse(vec.begin(), vec.end());

    cout << vec[0].second << endl;
  }
}

C++: #include<iostream>
#include<vector>
#include<algorithm>
#define all(c) (c).begin(),(c).end()

using namespace std;

int main(void){

  int m,nmin,nmax;

  while(cin >> m >> nmin >> nmax, m){
    vector<int>v(m);
    for(int i=0;i<m;i++)cin >> v[i];
    sort(all(v),greater<int>());
    int gap = 0, ans = 0;
    for(int i=nmax;i>=nmin;i--){
      if(v[i-1]-v[i] > gap)gap = v[i-1]-v[i], ans = i;
    }
    cout << ans << endl;
  }
  
  return 0;
}

C++: #include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <set>
#include <map>
#include <queue>
#include <stack>

using namespace std;

#define INF 1010001000
#define EPS 1e-10
#define rep(i, N) for (int i = 0; i < N; i++)
#define pb push_back

typedef pair<int, int> i_i;
typedef long long int llong;
typedef pair<llong, llong> ll_ll;
typedef struct edge {int f, t;}Edge;


int main()
{
    int m, min, max;
    while (cin >> m >> min >> max, m) {
        vector<int> data(200, 0);
        rep(i, m) {
            cin >> data[i];
        }
        int ans = 0;
        int ret = min;
        for (int i = min; i <= max; i++) {
            if (ans <= data[i-1] - data[i]) {
                ans = data[i-1] - data[i];
                ret = i;
            }
        }
        cout << ret << endl;
    }
    return 0;
}

C++: #include<iostream>
 
using namespace std;
const int MAX_N=1e3;
int data[MAX_N];
int main(){
    int m,nmi,nma;
    while(cin>>m>>nmi>>nma && nmi!=0){
        for(int i=0;i<m;i++)cin>>data[i];
        int ma=0;
        int ans=0;
        for(int i=nmi-1;i<nma;i++){
            if(ma<=data[i]-data[i+1]){
                ans=i+1;
                ma=data[i]-data[i+1];
            }
        }
        cout<<ans<<endl;
    }
}

C++: #include <iostream>
#include <stdio.h>
using namespace std;
int main(void){
    // Your code here!
    
    while(1){
    int m = 0;
    int nMin = 0;
    int nMax = 0;
    
    scanf("%d %d %d",&m,&nMin, &nMax);
    if(m==0 && nMin == 0 && nMax == 0)break;
    
    int p[2100] = { 0 };
    
    for(int i=0;i<m;i++){
        scanf("%d",&p[i]);
    }
    
    int gap = 0;
    int gap_i = 0;
    
    for(int i=0;i<m;i++){
        for(int j=nMin-1;j<nMax;j++){
            if(p[j]-p[j+1]>=gap){
                gap = p[j]-p[j+1];
                gap_i = j+1;
            }
            }
        }
    
    cout << gap_i << endl;
    }
    
    
    return 0;
}