This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<stdio.h> 
#include<deque> 
#include<algorithm> 
using namespace std; 
deque<int> ar[1001]; 
int size=0,aa[1000001]; 
struct pp{ 
    int score; 
    int team; 
}play[1000001]; 
bool cmp(struct pp a,struct pp b){ 
    return a.score<b.score; 
} 
int main() 
{ 
    //freopen("input.txt","r",stdin); 
    //freopen("output.txt","w",stdout); 
  
    int n,m,i,j,t,cnt=0,min,minindex,max,ans=1999999999; 
  
    scanf("%d %d",&n,&m); 
  
    for(i=1;i<=n;i++){ 
        for(j=1;j<=m;j++){ 
            size++; 
            scanf("%d",&play[size].score); 
            play[size].team=i; 
        } 
    } 
  
    sort(play+1,play+size+1,cmp); 
  
    for(i=1;i<=size;i++){ 
        ar[play[i].team].push_back(play[i].score); 
        aa[i]=play[i+1].team; 
    } 
  
    min=1999999999; 
    minindex=0; 
    max=-1; 
    t=1; 
    for(i=1;i<=n;i++){ 
        if(ar[i].front()>max) max=ar[i].front(); 
        if(ar[i].front()<min){ 
            min=ar[i].front(); 
            minindex=i; 
        } 
    } 
    if(ans>(max-min)) ans=(max-min); 
    ar[minindex].pop_front(); 
    if(ar[minindex].front()>max) max=ar[minindex].front(); 
    min=ar[aa[t]].front(); 
    minindex=aa[t]; 
    while(1){ 
        if(ans>(max-min)) ans=(max-min); 
        ar[minindex].pop_front(); 
        if(ar[minindex].size()<1) break; 
        if(ar[minindex].front()>max) max=ar[minindex].front(); 
        min=ar[aa[++t]].front(); 
        minindex=aa[t]; 
    } 
    printf("%d",ans); 
} 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |