zoukankan      html  css  js  c++  java
  • LightOJ 1369 Answering Queries(找规律)

    题目链接:https://vjudge.net/contest/28079#problem/P

    题目大意:给你数组A[]以及如下所示的函数f:     

    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;

    }

    有两个操作:0  x  v将A[x]转变成v。

          1计算函数f的值

    解题思路:①对于sum有规律:sum+=(n-1-2*i)*A[i]

         ②每次改变数组元素的值时,直接把sum的值也改变

         ③一定要记得强制转换long long,很重要

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 typedef long long LL;
     5 const int N=1e5+5;
     6 int a[N];
     7 
     8 int main(){
     9     int T;
    10     scanf("%d",&T);
    11     int cas=0;
    12     while(T--){
    13         int n,q;
    14         scanf("%d%d",&n,&q);
    15         for(int i=0;i<n;i++){
    16             scanf("%d",&a[i]);
    17         }
    18         printf("Case %d:
    ",++cas);
    19         LL sum=0;
    20         for(int i=0;i<n;i++){
    21             sum+=(LL)(n-1-2*i)*a[i];
    22         }
    23         while(q--){
    24             int op;
    25             scanf("%d",&op);
    26             if(op==1){
    27                 printf("%lld
    ",sum);
    28             }
    29             else{
    30                 int pos,v;
    31                 scanf("%d%d",&pos,&v);
    32                 //改变数组元素时,把sum也改变 
    33                 sum-=(LL)(n-2*pos-1)*a[pos];
    34                 sum+=(LL)(n-2*pos-1)*v;
    35                 a[pos]=v;
    36             }
    37         }
    38     }
    39 }
  • 相关阅读:
    Slider
    好久没更新了,发照片.....
    第二天、SQL*PLUS基本使用
    二进制方式存储图片(数据库)
    PagingBulletedList
    第四天、PL/SQL基础
    第八天、安全管理
    MutuallyExclusiveCheckBox
    第六天、视图,同义词,序列
    Rating
  • 原文地址:https://www.cnblogs.com/fu3638/p/7447551.html
Copyright © 2011-2022 走看看