zoukankan      html  css  js  c++  java
  • UVA 12299 RMQ with Shifts

    UVA_12299

        这个是湖南省赛的题目,要是早点能学到YTQ后来给我PPT的话,当时也许就过掉了。

        这个题目比一般的RMQ多了一个shift操作,用堆存储线段树然后直接自底向上更新一下即可。

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #define MAXD 100010
    #define INF 1000000000
    int N, M, Q, tree[4 * MAXD];
    char b[50];
    int a[50], d[50], n;
    int Min(int &x, int &y)
    {
    return x < y ? x : y;
    }
    void init()
    {
    int i, j;
    for(M = 1; M < N + 2; M <<= 1);
    for(i = M; i < 2 * M; i ++)
    tree[i] = INF;
    for(i = 0, j = M + 1; i < N; i ++, j ++)
    scanf("%d", &tree[j]);
    for(i = M - 1; i; i --)
    tree[i] = Min(tree[2 * i], tree[2 * i + 1]);
    }
    void change(int cur, int target)
    {
    int i, j;
    cur += M;
    tree[cur] = target;
    for(; cur ^ 1; cur >>= 1)
    tree[cur >> 1] = Min(tree[cur], tree[cur ^ 1]);
    }
    void solve()
    {
    int i, j, k, res, s, t;
    scanf("%s", b);
    if(b[0] == 's')
    {
    n = 0;
    for(i = 0; b[i]; i ++)
    {
    if(isdigit(b[i]))
    sscanf(&b[i], "%d", &a[n ++]);
    while(isdigit(b[i]))
    i ++;
    }
    for(i = 0; i < n; i ++)
    {
    if(i == n - 1)
    d[i] = tree[M + a[0]];
    else
    d[i] = tree[M + a[i + 1]];
    }
    for(i = 0; i < n; i ++)
    change(a[i], d[i]);
    }
    else
    {
    sscanf(&b[6], "%d", &s);
    sscanf(strchr(b, ',') + 1, "%d", &t);
    res = INF;
    s = s - 1 + M;
    t = t + 1 + M;
    for(; s ^ t ^ 1; s >>= 1, t >>= 1)
    {
    if(~s & 1)
    {
    res = tree[s ^ 1] < res ? tree[s ^ 1] : res;
    }
    if(t & 1)
    {
    res = tree[t ^ 1] < res ? tree[t ^ 1] : res;
    }
    }
    printf("%d\n", res);
    }
    }
    int main()
    {
    while(scanf("%d%d", &N, &Q) == 2)
    {
    init();
    for(int i = 0; i < Q; i ++)
    solve();
    }
    return 0;
    }


  • 相关阅读:
    Linux下Keepalived 安装与配置
    Nginx配置SSL证书部署HTTPS网站
    Nginx 实现MySQL的负载均衡
    iOS如何把导航默认的返回按钮设置成“返回”
    Java中JSON的简单使用与前端解析
    双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计
    iOS开发--使用RSA加密
    UIBezierPath画圆弧的记录
    SSL构建单双向https认证
    webpack配置上线地址
  • 原文地址:https://www.cnblogs.com/staginner/p/2230872.html
Copyright © 2011-2022 走看看