NEERC=Not Easy European Regional Contest
据说NEERC天天被搬,赶紧做了好了。在Claris和Google的帮助下做了10题,感谢cls。
http://codeforces.com/gym/100851
需要注意的是在cf上面做的时候标明文件名的题要开freopen(没标的那题是交互)。
这套题很好,所以希望想要认真想想的同学还是别手贱点开题解了,下面的顺序按通过人数降序。
A
给一个n*n的矩阵,开始(x,y)的格子上填的是x+y。
有两种询问(操作),第一种是输出一行的和并把这行清零,第二种是输出一列的和并把这列清零。
询问个数为q。n<=1e6,q<=1e5。
.
...
.....
.......
类似这样,由于不能堆到地上,所以这个形状肯定左边和右边都得有东西挡住。
.
...
#.#..#
######
反正就是左边和右边都得有一列至少不低于这个形状,然后只有没有挡住的中间这些要计入答案。
比如中间一列为x,高度为a[x],那么左边的某一列l,需要的高度就为a[x]-(x-l)=a[x]-x+l,如果它没有被挡住,那么就需要付出a[x]-x+l-a[l]个石子,被挡住的充要条件也就是a[x]-x<=a[l]-l。
对于左边我们只要二分一下到哪里被挡住了,查一下a[l]-l的最大值比较一下,把中间的a[x]-x+l-a[l]计入要用的石子数即可。右边同理。
知道堆到每个高度需要的石子个数,只要二分一下就好了。
这样是两个log的(如果你用O(1)rmq),通过一些技巧可以去掉一个log。
网上好像有一种更加科学的做法,参见 http://blog.csdn.net/u010568270/article/details/52382293。