1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include<cstdio>
#include "kollib.h"
#include "message.h"
#include<algorithm>
using namespace std;

const int MQ=204;
pair<pair<int, int>, int> zap[2*MQ];
int n, izap;
pair<pair<int, int>, int>* wsk;

void add(int v, int odl){
	int i, pocz, kon;
	wsk=lower_bound(zap, zap+2*izap, (make_pair(make_pair(v, 0), 0)));
	pocz=wsk-zap;
	wsk=lower_bound(zap, zap+2*izap, (make_pair(make_pair(v+1, 0), 0)));
	kon=wsk-zap-1;
	//printf("add %d %d %d\n", v, pocz, kon);
	for(i=pocz; i<=kon; i++)
		zap[i].second=odl;
	
}

int main(){
	int i, a, b, v, oj, syn, odl;
	if(MyNodeId() == 0){
		//printf("Oto ja!\n");
		n=NumberOfStudents();
		izap=NumberOfQueries();
		for(i=1; i<=izap; i++){
			a=QueryFrom(i);
			b=QueryTo(i);
			zap[2*(i-1)].first.first=a;
			zap[2*(i-1)].first.second=i;
			zap[2*(i-1)+1].first.first=b;
			zap[2*(i-1)+1].first.second=i;
			
		
		}
		sort(zap, zap+2*izap);
		/*for(i=0; i<2*izap; i++)
			printf("%d %d\n", zap[i].first.first, zap[i].first.second);*/
		
		v=1; oj=0; odl=0;
		add(1, 0);
		for(i=1; i<n; i++){
			syn=FirstNeighbor(v);
			if(syn==oj)
				syn=SecondNeighbor(v);
			odl++;
			//printf("%d %d %d\n", v, syn, odl);
			add(syn, odl);
			oj=v;
			v=syn;		
		}
		
		for(i=0; i<2*izap; i++){
			a=zap[i].first.first;
			zap[i].first.first=zap[i].first.second;
			zap[i].first.second=a;
		}
		sort(zap, zap+2*izap);
		
		/*for(i=0; i<2*izap; i++)
			printf("koncowka %d %d %d \n", zap[i].first.first, zap[i].first.second, zap[i].second);*/
		
		for(i=0; i<izap; i++){
			a=zap[2*i].second;
			b=zap[2*i+1].second;
			if(b<a){
				v=b;
				b=a;
				a=v;
			}
			printf("%d\n", min(b-a, n-(b-a)));
		
		}
		
	}


	return 0;
}