在大矩阵中切换和计算查询

时间:2015-08-15 12:50:06

标签: algorithm

给定10 ^ 18×10 ^ 18的矩阵。每个单元格都是0或1.最初都是0。

现在我们需要执行Q查询。我们有两种类型的查询:

1 x l r :如果public class RedirectPrintStream extends PrintStream { private static String NEW_LINE = String.format("%n"); // This creates the system-specific line break (depends on Windows/Linux/etc) public RedirectPrintStream(OutputStream out) { super(out); } @Override public void print(String obj) { super.print(obj); // or check here if the obj.length > 80 and add another line break, etc. super.print(NEW_LINE); } public static void main(String[] args) { PrintStream old = System.out; System.setOut( new RedirectPrintStream(old)); System.out.print("Hello"); System.out.print("World"); // will be printed in a new line instead of the same } } ,则表示我们应该切换行l,l + 1,...,r中所有单元格的值。 否则x = 0我们应该对列号l,l + 1,... r。

执行此操作

2 lrxy :我们需要在此矩阵的子矩形中打印标记为1的单元格数,包括行号l,l + 1,...,r和列号x, x + 1,...,y。

现在,如果矩阵的大小很小,这可能已经完成了。但是如何为10 ^ 18大小的矩阵做到这一点?我们无法创建矩阵,我们需要一些算法以有效的方式存储这些值来回答所有查询。

查询次数最多可达100 000次。如何有效地执行此操作?

0 个答案:

没有答案