#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; }
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; } |