问题标题: 酷町堂:结帖

0
0
已解决
陈正朔
陈正朔
初级光能
初级光能

题目描述 Description

给定数列 a[1],a[2],…,a[n],你需要依次进行 q个操作,操作有两类:

1 i x:给定 i,x,将 a[i] 加上 x;
2 l r:给定 l,r,求 ∑ri=la[i] 的值(换言之,求 a[l]+a[l+1]+⋯+a[r]的值)。

输入描述 Input Description

第一行包含 2个正整数 n,q,表示数列长度和询问个数。保证 1≤n,q≤106。
第二行 n 个整数 a[1],a[2],…,a[n],表示初始数列。保证 |a[i]|≤10^6。
接下来 q行,每行一个操作,为以下两种之一:

1 i x:给定 i,x,将 a[i] 加上 x;
2 l r:给定 l,r,求 ∑ri=la[i] 的值。
保证 1≤l≤r≤n, |x|≤10^6 。

输出描述 Output Description

对于每个 2 l r 操作输出一行,每行有一个整数,表示所求的结果。

 

为什么,没有TLE,直接WA0了

#include<iostream>
#pragma GCC optimize(3)
#pragma GCC optimize(2)
#include<cstdio>
using namespace std;
long long n,q,a[1000005],sum;
int main(){
	scanf("%lld%lld",&n,&q);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	while(q--){
		long long f,l,r;
		sum=0;
		scanf("%lld%lld%lld",&f,&l,&r);
		if(f==1) a[l]+=r;
		else{
			for(int i=l;i<=r;i++){
				sum+=a[i];
			}
			printf("%lld\n",sum);
		}
	}
	return 0;
}

 

陈正朔在2021-03-16 18:10:00追加了内容

没人就结贴


0
0
张展嘉
张展嘉
新手天翼
新手天翼

????????

张展嘉在2021-03-16 20:47:13追加了内容

我来结帖了【狗头】

0
0
曹灿阳
曹灿阳
初级天翼
初级天翼

你的scanf()的输入不对!

scanf()是格式化输入,比cin快那么亿亿亿亿丢丢。

以第8行为例(剩下的以此类推,我就不写了)

scanf("%lld %lld",&n,&q);

当然,用cin也可以。

PS:用cin方便一点,按照我的方法改,试试能不能AC,如果不能,就说明你的算法有问题/要优化,再改改。

曹灿阳在2021-03-17 21:33:29追加了内容

本题的scanf()里,两个“%lld”之间要加空格

我要回答