One Oier' s dawn

Posted bingoyes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了One Oier' s dawn相关的知识,希望对你有一定的参考价值。

专题复习-RMQ 问题

与众不同

#include <cstdio>
//#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for(register int a = (b); (a) <= (c); ++(a))
#define nR(a,b,c) for(register int a = (b); (a) >= (c); --(a))
#define Fill(a,b) memset(a, b, sizeof(a))
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define Min(a,b) ((a) < (b) ? (a) : (b))
#define Swap(a,b) ((a) ^= (b) ^= (a) ^= (b))

#define ON_DEBUGG

#ifdef ON_DEBUGG

#define D_e_Line printf("\n----------\n") 
#define D_e(x) cout << (#x) << " : " << x << endl
#define Pause() system("pause")
#define FileOpen() freopen("in.txt", "r", stdin)

#else

#define D_e_Line ;
#define D_e(x) ;
#define Pause() ;
#define FileOpen() ;

#endif
using namespace std;
struct ios
    template<typename ATP>inline ios& operator >> (ATP &x)
        x = 0; int f = 1; char ch;
        for(ch = getchar(); ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
        while(ch >= '0' && ch <= '9') x = x * 10 + (ch ^ '0'), ch = getchar();
        x *= f;
        return *this;
    
io;

template<typename ATP>inline ATP max(ATP &a, ATP &b)
    return a > b ? a : b;

template<typename ATP>inline ATP min(ATP &a, ATP &b)
    return a < b ? a : b;



const int N = 200007;

int n;
namespace RMQ

int f[N][21], lg[N], bin[21], last[N * 10], a[N], pos[N];
inline void Prepare()
    bin[0] = 1;
    R(i,1,20) bin[i] = bin[i - 1] << 1;
    R(i,2,n) lg[i] = lg[i >> 1] + 1;

inline void Init()
    R(i,1,n)
        io >> a[i];
        a[i] += 1000000;
        pos[i] = max(pos[i - 1], last[a[i]] + 1);
        f[i][0] = i - pos[i] + 1;
        last[a[i]] = i;
    
    
    int t = lg[n];
    R(j,1,t)
        int maxx = n - bin[j] + 1;
        R(i,1,maxx)
            f[i][j] = max(f[i][j - 1], f[i + bin[j - 1]][j - 1]);
        
    

inline int Query(int l, int r)
    int t = lg[r - l + 1];
    return max(f[l][t], f[r - bin[t] + 1][t]);




int main()
//FileOpen();
//freopen("1.txt", "w", stdout);

    int m;
    io >> n >> m;
    RMQ::Prepare();
    RMQ::Init();
    while(m--)
        int L, R;
        io >> L >> R;
        ++L, ++R;
//      int l = L, r = R, P;
//      while(l <= r)
//          int mid = (l + r) >> 1;
//          if(RMQ::pos[mid] <= L)
//              l = mid + 1;
//              P = l;
//          
//          else
//              r = mid - 1;
//      
        int P = lower_bound(RMQ::pos + L, RMQ::pos + R + 1, L) - RMQ::pos;
        printf("%d\n", min(R - L + 1, max(P - L, RMQ::Query(P, R)))); // false : P - L + 1
    
    
    return 0;

以上是关于One Oier' s dawn的主要内容,如果未能解决你的问题,请参考以下文章

LF.85.Determine If One String Is Another's Substring

习语Paddle one's own canoe

be at one's books 的结实?

The Magic only works with total devtion of one's heart

每日俚语(Day 8) Paddle one's own canoe.

display one's slight skill before an ecpert是啥意思?