bfs无果
给定一个长度为 n 的序列a[1],a[2]....a[n],对于某下标i,如果存在另一个下标j(j<i)使得a[i]+j−i>a[j]成立,序列的贡献数+1(某个i可能会有多个下标j使得条件成立,贡献数就要不断加上去)。求序列的总贡献。
输入样例
4
1 3 3 5
输出样例
3
我的代码
int n;
int tree[2000100];
int lowbit(int num)
{
return num & (~num+1);
}
void upset(int where,int num)
{
while(where<=n)
{
tree[where]+=num;
where+=lowbit(where);
}
}
int sum(int where)
{
int ans=0;
while(where>0)
{
ans+=tree[where];
where-=lowbit(where);
}
return ans;
}
int main()
{
//freopen("devote.in","r",stdin);
//freopen("devote.out","w",stdout);
n=read();
int ans=0;
for (re int i=1;i<=n;++i)
{
int t;t=read();
upset(t-i+n,1);
ans+=sum(t-i+n-1);
}
cout<<ans%12345;
fclose(stdin);
fclose(stdout);
return 0;
}