• 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;
    }

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

  • 相关阅读:
    协程—gevent模块的使用
    协程—概念以及基本使用
    Python—同步和互斥
    Hugo博客搭建
    Linux编辑利器-Vim
    Linux命令与Shell
    python入门基础
    .netcore程序在linux下用supervisor守护
    .netcore中添加Swagger
    winform或wpf中全局异常捕获
  • 原文地址:https://www.cnblogs.com/ningwei/p/poj3468.html
Copyright © 2020-2023  润新知