### Zlatan's blog

By Zlatan, history, 4 weeks ago, , Hi! I encounter difficulties in finding a solution to this problem: having a matrix filled with 0 and 1, size N x N with N <= 1000, output the number of squares with the border filled with 1 (we are not interested in what's inside the square). We consider valid even the squares of size 1x1. For this example, the answer is 27. Can anybody help me? (sorry for the example, I don't know how to show the lines one above the others) 0000000 0111100 0101111 0100101 0111111 0000011 0000011 Comments (6)
 » I think a 2D BIT should be enough to solve this task.
•  » » Can you tell me more detalis how?
•  » » » i m sorry i got the wrong idea from the task ... i ll think about it more.
 » The best I have is O(n3) solution with constant. I think it can pass if the time limit is two seconds (maybe even one second with powerful judge).
•  » » The time limit is 0.15 seconds
 » Solve each diagonal separately. You need to use 2D-segment tree or 2D-BIT for O(n*n*log(n)*log(n)) complexity or persistent segment tree for O(n*n*log(n)) complexity.