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>
#define rep(i,n)for(int i=0;i<n;i++)
using namespace std;

int p[200];
int main() {
	int m, s, g;
	while (scanf("%d%d%d", &m, &s, &g), m) {
		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 <utility>
#include <vector>

using namespace std;

int main()
{
    while (true) {
        int m;
        int nMin;
        int nMax;
        cin >> m >> nMin >> nMax;

        if (m == 0 && nMax == 0 && nMin == 0) {
            break;
        }

        vector<int> v;
        for (int i = 0; i < m; ++i) {
            int p;
            cin >> p;
            v.push_back(p);
        }

        auto maximum = make_pair(0, -1);
        for (int n = nMin; n <= nMax; ++n) {
            auto gap = v[n - 1] - v[n];
            if (maximum.second <= gap) {
                maximum = make_pair(n, gap);
            }
        }
        cout << maximum.first << endl;
    }
}

C++: #include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <cstdio>
#include <cmath>
#include <tuple>
#include <iomanip>
#include <numeric>
#include <unordered_map>
#include <sstream>
#include<limits.h>
#include<float.h>
#include<list>
#include <array>
#include <complex>
#include<stdio.h>
#include<string.h>
#include <bitset>
#include<random>
using namespace std;

int main()
{
	int n, l, r, curr, pre;
	
	vector<int> ans;
	while (1)
	{
		cin >> n >> l >> r;
		vector<int> m(n);
		if (n == 0 && l == 0 && r == 0) break;
		int max = 0;
		pre = 0;
		for (int i = 0; i < n; ++i)
			cin >> m[i];
		int diff = 0;
		for (int i = 0; i < r - l + 1; ++i)
		{
			if (diff <= m[i + l - 1] - m[i + l])
			{
				diff = m[i + l - 1] - m[i + l];
				max = i + l;
			}
		}
		ans.push_back(max);
	}
	for (const auto& a : ans)
		cout << a << endl;
	return 0;

}

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

int main(){
	while(1){
		int m,n1,n2;//n2は最大人数
		cin>>m>>n1>>n2;

		if(m==0&&n1==0&&n2==0)
			break;
		
		int P[200];
		for(int i=0;i<m;i++){
			cin>>P[i];
		}
		
		int gap=-1;
 		int n=-1;

 		for(int i=n1;i<=n2;i++){
			int g=P[i-1]-P[i];

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

		cout<<n<<endl
	}
	
	return 0;
}

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

#define rep(i,n) for (int i = 0; i < (n); ++i)

inline void init() {
    cin.tie(0);
    ios::sync_with_stdio(false);
}

int m, nmin, nmax, ans, dif;
int tester[205];

int main(void) {
    init();

    while (cin >> m >> nmin >> nmax, m | nmin | nmax) {
        memset(tester, 0, sizeof(tester));
        ans = dif = -1;
        rep (i,m) cin >> tester[i];

        sort(tester, tester + m, greater<int>());

        for (int i = nmin; i <= nmax; ++i) {
            int tmp = tester[i-1] - tester[i];
            if (dif <= tmp) {
                ans = i;
                dif = tmp;
            }
        }
        cout << ans << endl;
        /*rep(i,m) {
            cout << tester[i] << endl;
        }*/
    }
    return 0;
}

C++: #include<cstdio>

int main() {
	int m, nmin, nmax, p[100001], maxg = 0 , n;
	while (1) {
		scanf("%d %d %d", &m, &nmin, &nmax);
		for (int i = 0; i < m; i++) {
			scanf("%d", &p[i]);
		}
		for (int j = nmin; j <= nmax; j++) {
			if (p[j+1] - p[j] > maxg) {
				maxg = p[j+1] - p[j];
				n = j;
			}
			printf("%d\n", n);
		}
		if (m == nmin == nmax == 0)return 0;
	}
}

C++: #include <cstdio>
int n, l, r, p[222];
int main() {
	while (scanf("%d%d%d", &n, &l, &r), n | l | r) {
		for (int i = 0; i < n; i++) scanf("%d", &p[i]);
		int ret = 0, gap = -1;
		for (int i = l; i <= r; i++) {
			if (p[i - 1] - p[i] >= gap) ret = i, gap = p[i - 1] - p[i];
		}
		printf("%d\n", ret);
	}
	return 0;
}

C++: #include <bits/stdc++.h>
 
#define loop(n, i) for(int i=0;i<n;i++)
#define all(v) v.begin(),v.end()
#define HERE cout << "HERE: " << __LINE__ << endl;
#define INSP(v) cout << v << " at " << __LINE__ << endl;

using namespace std;
typedef long long ll;

int main()
{
    int m, min, max;
    while (cin >> m >> min >> max && m) {
        vector<int> v;
        loop(m, i) {
            int j; cin >> j;
            v.push_back(j);
        }

        int gap = 0;
        int ans = 0;
        for (int i = min; i <= max; i++) {
            if (gap < v[i-1] - v[i]) {
                gap = v[i-1] - v[i];
                ans = i;
            }
        }
        cout << ans << endl;
    }
}

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

int main(){
  int m,nmin,nmax;
  while(cin>>m>>nmin>>nmax,m){
    int score[m];
    int Maxnum=0;
    for(int i=0;i<m;i++)
      cin>>score[i];
    for(int i=nmin,Max=0;i<=nmax;i++)
      if(score[i-1]-score[i]>=Max){
	Max=score[i-1]-score[i]; Maxnum=i;
      }
    cout<<Maxnum<<endl;
  }
}

C++: #include <iostream>
using namespace std;
int main(){
    
    int m,nmax,nmin;

    while(cin>>m>>nmin>>nmax,m){
    
        int P[m];
        int M=0,ans=0;


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

        for(int i=nmin-1;i<nmax;i++){
            
            if(M<=P[i]-P[i+1]){
                
                M=P[i]-P[i+1];
                ans=i+1;
            }
            
        }


        cout<<ans<<endl;
    }
    return 0;
    
}

C++: #include<bits/stdc++.h>
using namespace std;
#define inf 1e9
#define ll long long
#define ull unsigned long long
#define M 1000000007
#define P pair<int,int>
#define PLL pair<ll,ll>
#define FOR(i,m,n) for(int i=m;i<n;i++)
#define RFOR(i,m,n) for(int i=m;i>=n;i--)
#define rep(i,n) FOR(i,0,n)
#define rrep(i,n) RFOR(i,n,0)
const int vx[4] = {0,1,0,-1};
const int vy[4] = {1,0,-1,0};
#define PI 3.14159265

int p[1000000];
int n;

int main(){
  cin>>n;
  rep(i,n){
    int a,b;
    cin>>a>>b;
    p[a-1]++;
    p[b]--;
  }

  rep(i,1000000){
    if(i==0) continue;
    p[i]+=p[i-1];
  }

  int ans=0;
  rep(i,1000000){
    if(p[i]>=i)
      ans=i;
  }

  cout<<ans<<endl;


  return 0;
}

C++: #include<bits/stdc++.h>
#define rep(i,a,b) for(int i=int(a);i<int(b);++i)
using namespace std;
typedef long long ll;
int INF = (1LL << 30) - 1;
int MOD = 1e9+7;
main(){
    int M,Nmin,Nmax;
    cin >> M >> Nmin >> Nmax;
    while(M){
        vector<int> V(M);
        rep(i,0,M)cin >> V[i];
        int maxd = 0,maxi;
        rep(i,Nmin-1,Nmax){
            if(maxd <= V[i] - V[i+1]){
                maxd = V[i] - V[i + 1];
                maxi = i + 1;
            }
        }
        cout << maxi << endl;
        cin >> M >> Nmin >> Nmax;
    }
}