Advertisement
Guest User

Untitled

a guest
Nov 26th, 2015
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <assert.h>
  3. #include <vector>
  4. #include <stdlib.h>
  5.  
  6. using namespace std;
  7.  
  8. #define MAXN 100000
  9. #define MAXT 100000
  10. #define MAXQ 100000
  11.  
  12. vector<int> g[MAXT];
  13.  
  14. void init(int t[],int N){
  15. for(int i=0; i<N; i++){
  16. g[t[i]].push_back(i);
  17. }
  18. }
  19.  
  20. int bs(int t, int k){
  21. int size = g[t].size();
  22. int i = 0;
  23. int f = size-1;
  24.  
  25. while(i<f){
  26. int m = (i+f)/2;
  27. if(k < g[t][m]){
  28. f = m-1;
  29. } else if( k > g[t][m]){
  30. i = m+1;
  31. } else
  32. return 0;
  33. }
  34.  
  35. int a = abs(k-g[t][i]);
  36. int b = a;
  37. if(i<size-1)
  38. b = abs(k-g[t][i+1]);
  39. int c = a;
  40. if(i>0)
  41. c = abs(k-g[t][i-1]);
  42. if(i==0)
  43. c = abs(k-g[t][size-1]);
  44.  
  45. if(a<b && a<c)
  46. return a;
  47. if(a<b && a>c)
  48. return c;
  49. return b>c?c:b;
  50. }
  51.  
  52. void risolvi(int N, int Q, int t[], int a[], int b[], int d[]) {
  53. init(t,N);
  54.  
  55. for (int i=0; i<Q; i++) {
  56. d[i] = bs(b[i],a[i]);
  57. }
  58. }
  59.  
  60.  
  61. int t[MAXN], a[MAXQ], b[MAXQ], d[MAXQ];
  62.  
  63. int main() {
  64. FILE *fr, *fw;
  65. int N, Q, i;
  66.  
  67. fr = fopen("input.txt", "r");
  68. fw = fopen("output.txt", "w");
  69. assert(2 == fscanf(fr, "%d%d", &N, &Q));
  70. for(i=0; i<N; i++)
  71. assert(1 == fscanf(fr, "%d", &t[i]));
  72. for(i=0; i<Q; i++)
  73. assert(2 == fscanf(fr, "%d%d", &a[i], &b[i]));
  74.  
  75. risolvi(N, Q, t, a, b, d);
  76.  
  77. for(i=0; i<Q; i++)
  78. fprintf(fw, "%d\n", d[i]);
  79. fclose(fr);
  80. fclose(fw);
  81. return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement