Cod sursa(job #1333390)

Utilizator vlady1997Vlad Bucur vlady1997 Data 3 februarie 2015 09:06:01
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
        #include <cstdio>
        #include <cmath>
        #include <algorithm>
        using namespace std;
        int d[21][100001], lg[100001];
        void RMQ (int n)
        {
            int i, j;
            for (i=1; (1<<i)<=n; i++)
            {
                for (j=1; j<=n-(1<<i)+1; j++)
                {
                    d[i][j]=min(d[i-1][j],d[i-1][j+(1<<(i-1))]);
                }
            }
        }
        int main()
        {
            int n, m, i, x, y, k;
            freopen("rmq.in","r",stdin);
            freopen("rmq.out","w",stdout);
            scanf("%d%d",&n,&m);
            for (i=1; i<=n; i++) scanf("%d",&d[0][i]);
            for (i=2; i<=n; i++) lg[i]=lg[i/2]+1;
            RMQ(n);
            for (i=1; i<=m; i++)
            {
                scanf("%d%d",&x,&y);
                k=lg[y-x+1];
                printf("%d\n",min(d[k][x],d[k][y-(1<<k)+1]));
            }
            return 0;
        }