【团队题】样例过,但是0分,调试无果

题目总版

zzhengxi @ 2024-11-16 18:49:59

题目来啦

题目名:数据结构

题目描述

  • 操作 1 将 a_i 加上 x
  • 操作 2 求区间 [l,r] 的和。

输入格式

第一行两个数 n,m

第二行 n 个整数 a_i

接下来 m 行,每行三个整数:

  • 1 i x:操作 1。
  • 2 l r:操作 2。

输出格式

对于每个操作 2 输出一个整数。

样例 #1

样例输入 #1

5 3
1 2 3 4 5
2 1 5
1 5 1
2 1 5

样例输出 #1

15
16

提示

数据范围 测试点 分值
1\le n,m\le 10^4 subtask 1 30
1\le n,m\le 10^5 subtask 2 70
$1\leq i\leq n

保证所有输入数据均为正整数,范围在 int 以>内。

分割线

本人代码

#include<bits/stdc++.h>
using namespace std;

int a[100010];
int s[100010];
int main(){
    int n,m;
    cin >> n >> m;
    for(int i = 1 ; i <= n ; i ++)
        cin >> a[i];
    for(int i = 1 ; i <= n ; i ++)
        s[i] = s[i - 1] + a[i];
    /*for(int i = 1 ; i <= n ; i ++)
        cout << s[i] << ' ';
    cout << '\n';*/
    while(m --){
        int i,j,k;
        cin >> i >> j >> k;
        if(i == 1){
            for(int x = j ; x <= n ; x ++)
                s[x] += k;
        }
        else{
            cout << s[k] - s[j - 1] << '\n';
        }
    }
    return 0;
}

样例都过了,可是0分,我试着调试,可没有用


by XiaoYiii @ 2024-11-16 18:51:58

有没有一种可能,你的时间复杂度不对


by zzhengxi @ 2024-11-16 18:52:05

题目
不知道你们能看到题目吗


by zzhengxi @ 2024-11-16 18:52:52

@XiaoYiii我WA了


by KarmaticEnding @ 2024-11-16 18:54:00

@zzhengxi 这是一道模板题,用线段树和树状数组均可。(不过我觉得你应该都不会。。。)

你提交 0 分是 \color{Red}{\texttt{Wrong Answer}} 还是 \color{Blue}{\texttt{Time Limit Excceed}}


by zzhengxi @ 2024-11-16 18:55:41

@light_dream我WA了


by Composite_Function @ 2024-11-16 18:57:00

@zzhengxi 你好像没开 long long


by zzhengxi @ 2024-11-16 18:57:45

@light_dream 你说的对。
只会用前缀和做的我:啊,谁来救救我


by KarmaticEnding @ 2024-11-16 18:58:18

@zzhengxi 我可能知道了……

你看,他只是说输入在 \texttt{int} 范围内,但是他没有保证你的 s 数组一直在 \texttt{int} 范围内,这就是说你可能需要 \texttt{long long}

你试一下这个?

#include<bits/stdc++.h>
using namespace std;

int a[100010];
long long s[100010];
int main(){
    int n,m;
    cin >> n >> m;
    for(int i = 1 ; i <= n ; i ++)
        cin >> a[i];
    for(int i = 1 ; i <= n ; i ++)
        s[i] = s[i - 1] + a[i];
    /*for(int i = 1 ; i <= n ; i ++)
        cout << s[i] << ' ';
    cout << '\n';*/
    while(m --){
        int i,j,k;
        cin >> i >> j >> k;
        if(i == 1){
            for(int x = j ; x <= n ; x ++)
                s[x] += k;
        }
        else{
            cout << s[k] - s[j - 1] << '\n';
        }
    }
    return 0;
}

by zzhengxi @ 2024-11-16 18:58:46

@Composite_Function ??? 为啥要开 long long


by Composite_Function @ 2024-11-16 18:59:42

@zzhengxi 因为加起来可能超过 int 的范围。


| 下一页