【tyvj1039】忠诚2

来源:互联网 发布:域名是做什么的 编辑:程序博客网 时间:2024/05/01 02:22

tyvj1039

主要是我太愚蠢。。。switch写错了卡了一会儿233

#include<cstdio>using namespace std;const int INF=300000+10;int m, n, minv[INF], a[INF];int x, y, _min;int min(int x, int y) {return x < y ? x : y;}void ctb(int o, int l, int r){    if(l == r){        minv[o] = a[l];    }    else {        int m = l + (r-l)/2;        ctb(o*2, l, m);        ctb(o*2+1, m+1, r);        minv[o] = min(minv[o*2], minv[o*2+1]);    }}void update(int o, int l, int r){    int m = l + (r-l)/2;    if(l == r) minv[o] = y;    else {         if(x <= m) update(o*2, l, m);        else update(o*2+1, m+1, r);        minv[o] = min(minv[o*2], minv[o*2+1]);    }}void query(int o, int l, int r){    if(x <= l && r <= y){        _min = min(_min, minv[o]);    }    else {        int m = l + (r-l)/2;        if(x <= m) query(o*2, l, m);        if(y > m) query(o*2+1, m+1, r);    }}int main() {    scanf("%d %d", &m, &n);    int i, p;    for(i = 1; i <= m; i++)        scanf("%d", &a[i]);    ctb(1, 1, m);    while(n--){        scanf("%d %d %d", &p, &x, &y);        if(p==1) {            _min=1<<30;            query(1, 1, m);            printf("%d ", _min);        }        else if(p==2) {            update(1, 1, m);        }    }    return 0;}
0 0
原创粉丝点击