zoukankan      html  css  js  c++  java
  • HDU 5247

    题意

    一个长度为n ( n <= 10^4 )的无序数组, 找是否存在k区间使得区间内元素排序后是连续的, 求有多少个这样的k区间( k <= 1000 )

    思路

    RMQ算法预处理区间的思想实现O(n)查询
    记录这个区间的最大最小值, 如果 最大值-最小值+1 == j-i+1ans[j-i+1]++

    剪枝:
    1. 如果 最大值 - 最小值>1000, break
    2. 如果 某个数在这个区间内出现次数(用map记录)大于一次, break

    一开始a[]数组开小了返的tle, 本以为如果是这样应该是re的, 记一下返t还有可能是因为越界

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <map>
    #include <cmath>
    using namespace std;
    //typedef unsigned long long ll;
    const int maxn = 1e4+5;
    const int mmaxn = 1e3+5;
    const int INF = 0x3f3f3f3f;
    int a[maxn];
    int ans[mmaxn];
    map<int, int> mp;
    int n;
    
    void solve(){
        int minmrk, maxmrk, i, j;
        for(i = 1; i <= n; i++){
            mp.clear();
            minmrk = a[i];
            maxmrk = a[i];
            mp[a[i]]++;
            ans[1]++;
            for(j = i+1; j <= n; j++){
                minmrk = min(minmrk, a[j]);
                maxmrk = max(maxmrk, a[j]);
                mp[a[j]]++;
                if( mp[a[j]] > 1 || maxmrk - minmrk > 1000 ) break;
                if( maxmrk - minmrk == j - i )
                    ans[j-i+1]++;
            }
        }
    }
    
    void check(){
        puts("------");
        for( int i = 1; i <= n; i++ )
            printf("%d : %d 
    ", i, ans[i]);
        puts("------");
    }
    
    int main()
    {
        int m, k;
        int kase = 0;
        while( ~scanf("%d%d",&n,&m) ){
            memset(ans, 0, sizeof ans);
            for( int i = 1; i <= n; i++ )
                scanf("%d",&a[i]);
            solve();
            //check();
            printf("Case #%d:
    ", ++kase);
            while(m--){
                scanf("%d", &k);
                printf("%d
    ", ans[k]);
            }
        }
        return 0;
    }
  • 相关阅读:
    hdu 1754 线段树 注意线段树节点的设计 求什么,设什么
    hdu 4015 概率题
    poj 1950 回溯
    最大上升子序列
    JVM学习博客
    2012
    i am alone at a crossroads
    易知难
    牢骚。。
    something
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740541.html
Copyright © 2011-2022 走看看