sinat_34985120 2016-05-13 08:16 采纳率: 0%
浏览 1105

请帮帮忙,这个程序不知道哪里错了,输不出结果

#include

using namespace std;

const int maxN=200000;

const int max=100000; //设定技能值最大为100000

int a[max],x,y,b[maxN];

int Lowbit(int x) //返回二进制最后一个1所表示的数

{ return x&(-x);}

void update (int x,int val) //向前更新

{while (x<=maxN)

{b[x]=b[x]+val;

x=x+Lowbit(x);

}

}

int sum(int x) //向右更新求和

{int sum=0;

while (x>0)

{ sum=sum+b[x];

x=x-Lowbit(x);

}

return sum;

}

int main()

{ int i,t,n;

long int m=0;

scanf("%d",&t);

while(t--)

{ scanf("%d",&n);

scanf("%d", &a[1]);

memset(b, 0, sizeof(b));//初始化树状组

scanf("%d", &a[1]);

for(i=1;i<=n;i++)

{scanf("%d",&a[i]);}

update(a[1], 1);

for(i=1;i<=n;i++)

{

scanf("%d", &a[i]);

update(a[i], 1);

x= sum(a[i] - 1);

}

scanf("%d", &a[n]);

memset(b, 0, sizeof(b)); ///注意这里要清空

update(a[n], 1);

for(i=n;i>0;i--)

{update(a[i], 1);

y=sum(a[i]-1);

}

for(i=2;i<=n;i++)

{m=m+x*(n-i-y)+y*(i-1-x);

}

printf("%lld\n",m);;

}

return 0;

}

  • 写回答

1条回答 默认 最新

  • 小灸舞 2016-05-13 08:27
    关注

    建议楼主自己单步一下,看看每一步得到的值是不是正确,不然你那么多scanf要看懂也不容易。。。
    单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

    评论

报告相同问题?

悬赏问题

  • ¥15 ROS Turtlebot3 多机协同自主探索环境时遇到的多机任务分配问题,explore节点
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题