只有subtack过了求助!
  • 板块P1816 忠诚
  • 楼主damuzhi
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/1 11:34
  • 上次更新2024/6/1 11:36:00
查看原帖
只有subtack过了求助!
1127424
damuzhi楼主2024/6/1 11:34
#include <bits/stdc++.h>

using namespace std;

long long a[400010];

struct node
{
    long long l,r;
    long long minn;
}t[400010];

long long minn(long long a,long long b)
{
    if(a < b)
        return a;
    return b;
}

void build_tree(long long i,long long l,long long r)
{
    t[i].l = l;
    t[i].r = r;

    if(l == r)
    {
        t[i].minn = a[l];
        return ;
    }
    long long mid = l+((r - l)>>1);
    build_tree(i<<1,l,mid);
    build_tree(i<<1 | 1,mid+1,r);
    t[i].minn = minn(t[i<<1].minn,t[i<<1 | 1].minn);
    return ;
}

int query_min(long long i,long long l,long long r)
{
    if(t[i].l >= l && t[i].r <= r)
    {
        return t[i].minn;
    }
    long long ans = 1e9;
    long long mid = t[i].l + ((t[i].r - t[i].l) >> 1);
    if(l <= mid)
        ans = minn(ans,query_min(i<<1,l,r));
    else if(r > mid)
        ans = minn(ans,query_min(i<<1 | 1,l,r));
    return ans;
}

int main()
{
    long long m,n;
    cin >> m >> n;
    for(long long i = 1; i <= m; i++)
    {
        cin >> a[i];
    }
    build_tree(1,1,m);
    while(n--)
    {
        long long l,r;
        cin >> l >> r;
        cout << query_min(1,l,r) << ' ';
    }
    return 0;
}
2024/6/1 11:34
加载中...