今天上午就A了一个不是树状数组的题,用的set,输出第一大,很是方便。
下午的比赛配合的很好,但是有一个尴尬的事,就是我读了第一题,然后理解错了,最后样例都没有过去,还是赵忠媛给我读的题意,然后A了,我的阅读水平真的是。。。难以用语言来形容了。刘文亚做的最后一个是个贪心,我觉得他比较适合这种题,然后就交给他做了,然后我做的是第二题,我感觉比较有技巧的就是在去X的路上的处理,我当时做的时候就想如果一个一个的点计算,然后到达X点再结束,有太多的重复了,有点浪费时间,然后我觉得从X出发,依次到达每一个点比较简单,就是在处理的时候不同于从X回来时,从X回来是:dis[i]=dis[k]+a[k][i];(k点是此时的没有用走过的最短路径),到X的路径是:dis[i]=dis[k]+a[i][k];这里的路径方向是相反的,虽然从后面看,但是方向不能变。赵忠媛就是A了一个数学题,用了一个我连听过都没有听过的方法。
晚上我做了一个类似涂气球的,区间更新,单点查询,之前的方法不行了,因为数据太大了。差分数组又当做a[i],重新弄了一个树状数组,我看的时候很是懵,然后问了下刘妍,才明白。D[i]=a[i]-a[i-1];这里的D[i]是a[i]的差分数组,然后
sum[i]=a[1]+a[2]+a[3]+......a[n]
=D[1]+(D[1]+D[2])+(D[2]+D[1]+D[3])+.......+(d[1]+D[2]+.......+D[n])
=n*(D[1]+D[2]+......+D[n])-(n-1)*D[n]-(n-2)*D[n-1]-......;
后面减得部分用的树状数组求得和,这里的a2[i]=(i-1)*D[i];
我觉得这个我不用肯定要忘,本来会的时候就有点艰难,不练就更容易忘了。