【技巧】LightOj Answering Queries 1369

1369 - Answering Queries
Time Limit: 3 second(s) Memory Limit: 32 MB

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 106denoting 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

Output for Sample Input

1

3 5

1 2 3

1

0 0 3

1

0 2 1

1

Case 1:

-4

0

4

Note

Dataset is huge, use faster I/O methods.



題意:

按題給的代碼,求解操作。

解題思路:

主要WA在了沒注意到long long 型的。

AC代碼:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>

using namespace std;

const int MAXN = 100000+10;
typedef long long LL;

int main()
{
	int t;
	int xp=1;
	scanf("%d",&t);
	while(t--){
		int n,q;
		LL A[MAXN];
		LL sum=0; 
		scanf("%d%d",&n,&q);
		for(int i=0;i<n;i++){
			scanf("%lld",&A[i]);
			sum+=A[i]*(LL)(n-i-1);
		}
		for(int i=1;i<n;i++){
			sum-=A[i]*i;
		}
		int x,v;
		printf("Case %d:\n",xp++);
		while(q--){
			int op;
			scanf("%d",&op);
			if(op==1){
				printf("%lld\n",sum);
			}
			else {
				scanf("%d%d",&x,&v);
				sum=sum-(v-A[x])*x+(v-A[x])*(n-1-x);
				A[x]=v;
			}
		}
	}
	return 0;
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章