[洛谷]P1816 忠诚

板子题

#include
using namespace std;
const int N = 1e5+10;
struct node{
    int l,r;
    int minv;
}tr[N*4];
int n,m,w[N];
void pushup(int u){
    tr[u].minv=min(tr[u<<1].minv,tr[u<<1|1].minv);
}
void build(int u,int l,int r){
    if(l==r)tr[u]={l,r,w[l]};
    else{
        tr[u]={l,r};
        int mid=l+r>>1;
        build(u<<1,l,mid),build(u<<1|1,mid+1,r);
        pushup(u);
    }
}
int query(int u,int l,int r){
    if(tr[u].l>=l&&tr[u].r<=r)return tr[u].minv;
    int mid=tr[u].l+tr[u].r>>1;
    int minv=1e9;
    if(l<=mid)minv=min(minv,query(u<<1,l,r));
    if(r>mid)minv=min(minv,query(u<<1|1,l,r));
    pushup(u);
    return minv;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>w[i];
    build(1,1,n);
    for(int i=1;i<=m;i++){
        int a,b;
        cin>>a>>b;
        cout<

over~

你可能感兴趣的:(算法,数据结构,c++)