Cod sursa(job #3166665)

Utilizator TeofilIacobTeo george TeofilIacob Data 9 noiembrie 2023 11:20:53
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.97 kb
#include <bits/stdc++.h>
#include <cmath>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int rmq[18][100010],n,q;

int main()
{
    f>>n>>q;
    for(int i=1;i<=n;i++)
        f>>rmq[0][i];
    for(int i=1,pas=1;pas<=n;i++,pas*=2)
        for(int j=1;j<=n-pas;j++)
            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+pas]);
    for(;q;q--)
    {
        int a,b,exp,pow;
        f>>a>>b;
        exp=31-__builtin_clz(b-a+1);
        pow=1<<exp;
        g<<min(rmq[exp][a],rmq[exp][b-pow+1]);
    }
    return 0;
}


//5 4
/////1 2 3 4 5
//
//   1 5 6 4 3
//
//2 4=  4
//1 2=  1
//3 5 = 3
//1 4 = 1
//mh<=mg<=ma





//#include <bits/stdc++.h>
//
//using namespace std;
//ifstream f("aib.in");
//ofstream g("aib.out");
//const int N=100010;
//int n,m,op,aib[N];
//void adun(int i,int v)
//{
//    for(;i<=n;i+=i&(-i))
//        aib[i]+=v;
//}
//int suma(int i)
//{
//    int sol=0;
//    for(;i;i-=i&(-i))
//        sol+=aib[i];
//    return sol;
//}
//int suma(int a,int b)
//{
//    return suma(b)-suma(a-1);
//}
//int main()
//{
//    f>>n>>m;
//    for(int i=1;i<=n;i++)
//    {
//        int x;
//        f>>x;
//        adun(i,x);
//    }
//    for(int i=1;i<=m;i++)
//    {
//        f>>op;
//        if(op==0)
//        {
//            int x,y;
//            f>>x>>y;
//            adun(x,y);
//        }
//        else
//        if(op==1)
//        {
//            int a,b;
//            f>>a>>b;
//            g<<suma(a,b)<<'\n';
//        }
//        else
//        {
//            int lo=0,hi=n,mi,a;
//            f>>a;
//            while(hi-lo>1)
//            {
//                mi=(hi+lo)/2;
//                if(suma(mi)<a)
//                    lo=mi;
//                else
//                    hi=mi;
//            }
//            if(suma(hi)==a)
//                g<<hi<<'\n';
//            else
//                g<<"-1\n";
//
//        }
//    }
//    return 0;
//}