RT,本人是个刚入坑OI几天的大蒟蒻 在看完题解+b站看相关视频后才知道该怎么处理这个问题。借鉴之后,担心直接当成作弊被处理掉 so...像这种板子题如果只进行了少量修改会不会被认定抄袭进而喜提屎名呢? 请教下该怎么提交/学习板子题代码
以下是我根据第一篇题解修改后 准备提交的码子
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+50;
int n,m;
int tree[N];//1 3 5 7位为第一层 2 6为第二层 4为第三层 8为第四层
int lowbit(int k)//lowbit表示二进制下最低位的数值 如lowbit(8)=8 lowbit(5)=1
{
return k & -k;
}
void add(int x,int k)//tree[i]正上方的序列 是tree[i+lowbit[i]]
{
while(x<=n)
{
tree[x]+=k;
x=x+lowbit(x);
}
}
int sum(int x)//通过lowbit从右向左迭代相加 得到结果(例如 12->8->0->break)
{
int ans=0;
while(x!=0)
{
ans+=tree[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int num;cin>>num;
add(i,num);//此时 位置为i&他正上方的所有数组得到了赋值
}
for(int i=1;i<=m;i++)
{
int instructID,l,r;
scanf("%d%d%d",&instructID,&l,&r);
if(instructID==1) add(l,r);
if(instructID==2) cout<<sum(r)-sum(l-1)<<endl;
}
return 0;
}