zoukankan      html  css  js  c++  java
  • Ural_1613. For Fans of Statistics(快排+二分)

      思路就是快排+二分查找。有重复的数字,多加了一点小处理。

    My Code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>

    using namespace std;

    const int N = 70005;

    class node {
    public:
    int num;
    int ord;
    } a[N];

    bool cmp(node a, node b){
    if(a.num == b.num) return a.ord < b.ord;
    return a.num < b.num;
    }

    int bin_search(int t, int n) {
    int l, r, mid;
    l = 1; r = n;
    while(l <= r) {
    mid = (l + r) >> 1;
    if(t == a[mid].num) return mid;
    else if(t < a[mid].num) r = mid-1;
    else l = mid+1;
    }
    return 0;
    }

    int main() {
    //freopen("data.in", "r", stdin);

    int n, i, q, l, r, t, d, flag;
    while(~scanf("%d", &n)) {
    for(i = 1; i <= n; i++) {
    scanf("%d", &a[i].num);
    a[i].ord = i;
    }
    stable_sort(a+1, a+n+1, cmp);
    scanf("%d", &q);
    while(q--) {
    scanf("%d%d%d", &l, &r, &t);
    i = bin_search(t, n);
    d = i; flag = 0;
    //避免重复的数字找不到的情况
                while(t == a[d].num && d > 0) {
    if(a[d].ord >= l && a[d].ord <= r) {
    printf("1"); flag = 1; break;
    } else d--;
    }
    if(flag) continue;
    d = i;
    while(t == a[d].num && d <= n) {
    if(a[d].ord >= l && a[d].ord <= r) {
    printf("1"); flag = 1; break;
    }
    else d++;
    }
    if(flag) continue;
    printf("0");
    }
    printf("\n");
    }
    return 0;
    }



  • 相关阅读:
    weka中算法说明[转]
    浅入浅出JS中的eval及json
    JavaScript变量声明提前
    三种常用的js数组去重方法
    深入理解JavaScript的变量作用域
    调试工具--console用法收藏
    《js高级程序设计》--第三章数据类型
    Oracle数据备份和恢复
    Oracle归档日志管理
    Oracle字符集的设置
  • 原文地址:https://www.cnblogs.com/vongang/p/2255463.html
Copyright © 2011-2022 走看看