今天上午还是在继续着对树状数组的学习,也试着自己水了几题。其中几道题令我印象深刻。
有道题是就是给你n个数,m个操作,操作分为两种
1 a b k c,就是 i属于(a,b)这个区间,而且i必须满足(i-a)%k==0,然后这个数加上c
2 a,问你坐标为a的数的大小是多少
得i%k==a%k;
这道题我本来想自己水掉,可是怎么改都是超时。最后看博客是开了一个三维的树状数组,c[i][k][mod],mod是i%k,因为k比较小所以对每一个k都建立了树状数组,当然sum也要全部k的累加一下,c中储存的是增量。
下午还进行了团体训练赛。
第一题是明显的最小生成树,给了几个坐标,求将这几个点连起来最短用多少,就是求出每一点到其他点的直线距离,然后prim算法。
第二题也是图论,有了几个点,给了数条单向路,求每一点的牛从起始点到x在回来花的时间,求用时最长的牛。我第一反应可以用
迪杰特拉斯算法求x到各个点的,但是如果在去遍历所有点求其到x的距离的话,肯定是n^3,可是如果将路径全部反向,原本走向x的变成从x走回,再用迪
杰特拉斯算法,就可以求出最短路径,此时n^2的时间。
第四题也是令我怎么也想不到的题,5*5的方格找连续的7个,求J个数比H多的情况种数我在尝试深搜与最小生成树都不对,比赛结束后竟然是完全暴力的方法,连续7个循环套起来,穷举所有点。。。
感觉自己现在能对树状数组的理解还是不够灵活,上面那道题就令我没想到,明天还是树状数组,加油吧!!