【发布时间】:2021-10-30 16:36:32
【问题描述】:
我正在解决一个名为 shill 和 wave sequence 的 Fenwick 树问题,它没有通过所有测试用例,直到我添加了一行查看解决方案并且现在想要找到它的目的,这是我的代码
#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
long long query(long long index,int p,long long **bit)
{
long long count=0;
for(;index>0;index-=(index&(-index)))
{
count=(count+bit[index][p])%mod;
}
return count;
}
void update(long long **bit,long long index,int p,long long val)
{
for(;index<=100000;index+=(index&(-index)))
{
bit[index][p]=(bit[index][p]+val)%mod;
}
}
int main()
{
int n;
cin>>n;
long long ans=0;
long long **bit=new long long*[100000+1];
for(int i=1;i<=100000;i++)
{
bit[i]=new long long[3];
for(int j=0;j<3;j++)
{
bit[i][j]=0;
}
}
for(int i=0;i<n;i++)
{
long long x;
cin>>x;
long long a=(query(x-1,0,bit)+query(x-1,2,bit))%mod;
long long b=(query(100000,1,bit)+query(100000,2,bit))%mod-query(x,1,bit)-query(x,2,bit);
b=(b+mod)%mod;
//WHAT IS THE PURPOSE OF ABOVE LINE?
ans+=(a+b)%mod;
update(bit,x,0,b);
update(bit,x,1,a);
update(bit,x,2,1);
}
cout<<ans%mod;
return 0;
}
b=(b+mod)%mod 但为什么呢?
【问题讨论】:
-
b是否为负数可能有意义!%不是取模运算符,而是取余运算符。 -
我投票结束这个问题,因为它似乎基本上是一个数学和/或计算机科学问题,而不是一个编程问题。
-
@KarlKnechtel 这很明显与编程相关——特别是因为如果你把它当作一个纯数学问题,答案会不同。
-
@KarlKnechtel 这是关于操作员
%的行为的问题。值得注意的是,a % b在大多数编程语言中的不同之处在于,四种可能的符号组合(a 正,b 正),(a 负,b 正),(a 正,b 负),(a 负, b 负数)。因此,对于每种不同的编程语言,这个问题都会有不同的答案。如果这样的问题不适合stackoverflow,那我不知道会是什么问题。
标签: c++ math modulo long-long fenwick-tree