• poj3468一个简单的整数问题,我昨天一下午才写好的水代码。


    查看不能折叠的水代码
    #include<stdio.h>
    struct
    {
        int s, e;
        long long int s1, s2;
    } x[262144];
    void set(int s, int e, int t)
    {
        x[t].s = s;
        x[t].e = e;
        if (s != e)
        {
            set(s, (s + e) >> 1, (t << 1) + 1);
            set(((s + e) >> 1) + 1, e, (t << 1) + 2);
        }
    }
    
    long long int CQ(int s, int e, long long int a, int t)
    {
        int m;
        long long int n;
        x[t].s1 += a * (e - s + 1);
        if ((x[t].s == s) && (x[t].e == e))
        {
            x[t].s2 += a;
            return x[t].s1;
        }
        else
        {
            m = (x[t].s + x[t].e) >> 1;
            n = (s <= m) ? CQ(s, (m < e ? m : e), a, (t << 1) + 1) : 0;
            n += (e > m) ? CQ((m >= s ? m + 1 : s), e, a, (t << 1) + 2) : 0;
            return x[t].s2 * (e - s + 1) + n;
        }
    }
    
    int main()
    {
        int n, m, i;
        long long int a;
        char c;
        scanf("%d %d", &n, &m);
        set(1, n, 0);
        for (i = 1; i <= n; i++)
        {
            scanf("%lld", &a);
            CQ(i, i, a, 0);
        }
        while (m--)
        {
            getchar();
            scanf("%c %d %d", &c, &i, &n);
            if (c == 'Q')
                printf("%lld\n", CQ(i, n, 0, 0));
            else
            {
                scanf("%lld", &a);
                CQ(i, n, a, 0);
            }
        }
        return 0;
    }

    以后做题一定要注意取值范围。。。谨以此题为戒。

  • 相关阅读:
    关于c:fakepath的解决办法
    golang channel 源码剖析
    深入虚拟内存(Virtual Memory,VM)
    浅析 golang module
    浅析 golang interface 实现原理
    Golang channel实现
    LCS(最长公共字序列)实现
    Golang令牌桶-频率限制
    OpenGL(3)-三角形
    OpenGL(2)-窗口
  • 原文地址:https://www.cnblogs.com/ningwei/p/poj3468.html
Copyright © 2020-2023  润新知