加法没超限,取模貌似会浪费时间
70分代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int n,m;
struct stu{
ll x=0,y=0,z=0;
}node[100005];
int main()
{
cin>>n>>m;
ll r,l,op,k,a,b,c;
for(int i=0;i<m;i++){
cin>>op>>r>>l;
if(op==1){
cin>>a>>b>>c;
for(int j=r;j<=l;j++){
node[j].x=node[j].x+a;
node[j].y=node[j].y+b;
node[j].z=node[j].z+c;
}
}
else if(op==2){
cin>>k;
for(int j=r;j<=l;j++){
node[j].x=node[j].x*k%mod;
node[j].y=node[j].y*k%mod;
node[j].z=node[j].z*k%mod;
}
}
else if(op==3){
for(int j=r;j<=l;j++){
ll temp=node[j].x;
node[j].x=node[j].y;
node[j].y=node[j].z;
node[j].z=temp;
}
}
else if(op==4){
ll x=0,y=0,z=0;
for(int j=r;j<=l;j++){
x=x+node[j].x;
y=y+node[j].y;
z=z+node[j].z;
}
x=x%mod;
y=y%mod;
z=z%mod;
ll sum=(x*x%mod+y*y%mod+z*z%mod)%mod;
cout<<sum<<endl;
}
}
return 0;
}