Advertisement
evandrix

TOJ1613 For Fans of Statistics

Aug 21st, 2012
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. const int N = 70005;
  9.  
  10. class node {
  11. public:
  12. int num;
  13. int ord;
  14. } a[N];
  15.  
  16. bool cmp(node a, node b){
  17. if(a.num == b.num) return a.ord < b.ord;
  18. return a.num < b.num;
  19. }
  20.  
  21. int bin_search(int t, int n) {
  22. int l, r, mid;
  23. l = 1; r = n;
  24. while(l <= r) {
  25. mid = (l + r) >> 1;
  26. if(t == a[mid].num) return mid;
  27. else if(t < a[mid].num) r = mid-1;
  28. else l = mid+1;
  29. }
  30. return 0;
  31. }
  32.  
  33. int main() {
  34. //freopen("data.in", "r", stdin);
  35.  
  36. int n, i, q, l, r, t, d, flag;
  37. while(~scanf("%d", &n)) {
  38. for(i = 1; i <= n; i++) {
  39. scanf("%d", &a[i].num);
  40. a[i].ord = i;
  41. }
  42. stable_sort(a+1, a+n+1, cmp);
  43. scanf("%d", &q);
  44. while(q--) {
  45. scanf("%d%d%d", &l, &r, &t);
  46. i = bin_search(t, n);
  47. d = i; flag = 0;
  48. //避免重复的数字找不到的情况
  49.             while(t == a[d].num && d > 0) {
  50. if(a[d].ord >= l && a[d].ord <= r) {
  51. printf("1"); flag = 1; break;
  52. } else d--;
  53. }
  54. if(flag) continue;
  55. d = i;
  56. while(t == a[d].num && d <= n) {
  57. if(a[d].ord >= l && a[d].ord <= r) {
  58. printf("1"); flag = 1; break;
  59. }
  60. else d++;
  61. }
  62. if(flag) continue;
  63. printf("0");
  64. }
  65. printf("\n");
  66. }
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement