luogu#P3889. [GDOI2014] 吃
[GDOI2014] 吃
题目背景
感谢 @FFjet 提醒,第 8 个数据点损坏暂时删除。
题目描述
W师兄计划了很久,终于成功的在BG开了一家寿司店。
正当W师兄还在兴奋的时候,这时一个噩耗传来,吃货L师姐居然知道了这件事,而且正赶过来,W师兄瞬间心就冷了下去,但是机智的W师兄也瞬间想到了应付L师姐的策略.......
这时,L师姐到了寿司店,先四处望了望风景,发现现在只有L师姐一个顾客,下面是L师姐的选餐说明:
1.寿司店内的寿司被排在一行共N个盘子里,按从左到右编号为1~N。
2.每个位置上寿司的数量是确定的并且有玻璃窗保护。
3.每隔一段时间就会有一个选餐时间,L师姐可以在一个连续的区间[l, r]中选择其中一盘,然后在该区间之外选择另一盘(如果区间外有盘子)。
L师姐发现这家寿司店厨师的制作速度很快,总能在下一次选餐时间前将寿司数量恢复原样。
作为有尊严有追求的吃货,L师姐也有自己的规则,L师姐在选完两盘寿司后,会决定每口恰好吃D个寿司,且使得两盘寿司刚好可以分别吃完,不剩余任何寿司。比如两盘寿司数量为2和4,那么D=1或者D=2都可以恰好将两盘寿司分别吃干净,而两盘寿司数量为3和5时,那么只能D=1才行。
作为有特殊追求的L师姐才不在乎吃的数量,L师姐在乎的是一口吃多个寿司的感觉。于是,如果L师姐可以一口吃D个寿司,那么L师姐的愉悦值为D,但是L师姐没有选到两盘寿司,那么她的愉悦值为0。
现在L师姐知道每个盘子所放着的寿司数量,L师姐想知道每次选择时间过后她可以获得的最大愉悦值是多少?
输入格式
第一行输入一个整数N,表示寿司的盘子数量。
第二行输入N个整数a1,a2,…,aN,ai表示第i个盘子内的寿司数量。
第三行输入一个整数M,表示有多少个选餐时间。
接下来M行,每行两个整数li, ri (1 <= li <= ri <= N),含义如题面所示。
输出格式
输出M行,第i行表示第i个选择时间师姐可能达到的最大愉悦值D。
5
1 2 3 4 5
2
2 3
2 4
2
1
5
2 4 8 16 32
2
3 4
2 3
16
8
提示
###样例解释
样例1里的第一个选餐时间,可以选择2和4,这样L师姐就可以每次吃两个寿司,使得两个盘子都可以吃干净,第二个选餐时间,师姐不管选哪两个盘子,都只能每次吃一个。
样例2 里的第一个选餐时间,可以选择16和32,而第二个选餐时间,L师姐可以选择8和16或者8和32。
对于20%的数据,N <= 100, M <= 100, max(a1,a2,…,aN) <= 100。
对于50%的数据,N <= 10000, M <= 10000, max(a1,a2,…,aN) <= 10000。
对于100%的数据,N <= 100000, M <= 100000, max(a1,a2,…,aN) <= 100000。