求助3TLE

P3372 【模板】线段树 1

yangjinxuan123456 @ 2024-02-23 16:04:48

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m,ar[100000],a,x,y,k,s;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>ar[i];
    }
    for(int i=0;i<m;i++){
        cin>>a;
        if(a==1){
            cin>>x>>y>>k;
            for(int j=x-1;j<=y-1;j++){
                ar[j]+=k;
            }
        }
        else{
            cin>>x>>y;
            s=0;
            for(int j=x-1;j<=y-1;j++){
                s+=ar[j];
            }
            cout<<s<<endl;
        }
    }
}

by Day_Tao @ 2024-02-23 16:21:12

首先,这是线段树板子题……

最后三个点如果是你这种写法的话, n\times m 得要跑 10^{10} ,会T飞。

请学习完线段树部分知识再来尝试此题。

还有,“保证任意时刻数列中所有元素的绝对值之和 \le {10}^{18} ”,不开long long见祖宗。


|