zoukankan      html  css  js  c++  java
  • LightOJ

    Time Limit: 3000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu

    Status

    Description

    The problem you need to solve here is pretty simple. You are give a function f(A, n), where A is an array of integers and n is the number of elements in the array. f(A, n) is defined as follows:

    long long f( int A[], int n ) { // n = size of A

        long long sum = 0;

        for( int i = 0; i < n; i++ )

            for( int j = i + 1; j < n; j++ )

                sum += A[i] - A[j];

        return sum;

    }

    Given the array A and an integer n, and some queries of the form:

    1)      0 x v (0 ≤ x < n, 0 ≤ v ≤ 106), meaning that you have to change the value of A[x] to v.

    2)      1, meaning that you have to find f as described above.

    Input

    Input starts with an integer T (≤ 5), denoting the number of test cases.

    Each case starts with a line containing two integers: n and q (1 ≤ n, q ≤ 105). The next line contains n space separated integers between 0 and 106 denoting the array A as described above.

    Each of the next q lines contains one query as described above.

    Output

    For each case, print the case number in a single line first. Then for each query-type "1" print one single line containing the value of f(A, n).

    Sample Input

    1

    3 5

    1 2 3

    1

    0 0 3

    1

    0 2 1

    1

    Sample Output

    Case 1:

    -4

    0

    4

    Source

    Problem Setter: Hasnain Heickal Jami
    Special Thanks: Jane Alam Jan
     
    细节+ 规律,
    #include <cstdio>
    #define N 100000+100
    typedef long long LL;
    LL a[N];
    int main()
    {
        int t, Q=1; scanf("%d", &t);
        while(t--)
        {
            int n, q; scanf("%d%d", &n, &q);
            for(int i=0; i<n; i++)
                scanf("%lld", &a[i]);
            LL getSum=0;
            //for(int i=0; i<n; i++)
            //    getSum+=(n-1-i*2)*a[i];
            LL A=n-1, b=0;
            for(int i=0; i<n; i++)
            {
                if(A <0|| b> n)
                    continue;
                getSum +=A*a[i]-b*a[i];
                A--; b++; 
            }
            int firNum;
            printf("Case %d:
    ", Q++);
            while(q--)
            {
                scanf("%d", &firNum);
                if(firNum==1)
                    printf("%lld
    ", getSum);
                else
                {
                    int posi; LL modify;
                    scanf("%d%lld", &posi, &modify);
                    LL wc=modify-a[posi];
                    getSum=getSum+(n-1-2*posi)*wc;
                    a[posi]=modify;  //更新必须要有 !!!!! ;
                }
            }
        }
        return 0;
    }

     

  • 相关阅读:
    ACM-ICPC 中可能会使用到的库
    ACM中java的使用
    Codeforces
    洛谷 P1879 玉米田(状压DP入门题)
    洛谷 P2622 关灯问题II(状压DP入门题)
    poj 2385 Apple Catching(记录结果再利用的动态规划)
    NOIP 提高组 2014 飞扬的小鸟(记录结果再利用的DP)
    2018.10.26 浪在ACM 集训队第四次测试赛
    NOIP 提高组 2014 联合权值(图论???)
    NOIP 普及组 2012 寻宝(思维???)
  • 原文地址:https://www.cnblogs.com/soTired/p/5365509.html
Copyright © 2011-2022 走看看