题意:

见以下样例,给出 5 个区间,每个区间的高度已知。一共 4 次操作。每次操作都是从最左边开始向下垒一个宽为 w 高为h 的木块,过程见下图。

问每次垒木块的高度是多少?

Input
5
1 2 3 6 6
4
1 1
3 1
1 1
4 3
Output
1
3
4
6
The first sample are shown on the picture.

思路:

线段树区间更新裸题,注意爆int

代码:

#include <bits/stdc++.h>using namespace std;
#define mi (l+r)/2;
#define ls l,mid,rt*2
#define rs mid+1,r,rt*2+1
const int MAXN=1e5;
long long tree[MAXN*4],lazy[MAXN*4];
long long n,m,st,en,ans,w,h;
void push_down(int rt){if(lazy[rt]){lazy[rt*2]=lazy[rt*2+1]=lazy[rt];tree[rt*2]=tree[rt*2+1]=lazy[rt];lazy[rt]=0;}return ;
}
void push_up(int rt){tree[rt]=max(tree[rt*2],tree[rt*2+1]);return ;
}
void build(int l,int r,int rt){if(l==r){scanf("%I64d",&tree[rt]);return ;}int mid=mi;build(ls);build(rs);push_up(rt);return ;
}
void update(int l,int r,int rt){if(st<=l&&r<=en){tree[rt]=lazy[rt]=ans;return ;}int mid=mi;push_down(rt);if(st<=mid) update(ls);if(mid<en) update(rs);push_up(rt);
}
void query(int l,int r,int rt){if(st<=l&&r<=en){ans=max(tree[rt],ans);return ;}int mid=mi;push_down(rt);if(st<=mid) query(ls);if(mid<en) query(rs);return ;
}
int main()
{while(scanf("%I64d",&n)!=-1){memset(tree,0,sizeof(tree));memset(lazy,0,sizeof(lazy));build(1,n,1);scanf("%I64d",&m);st=1;while(m--){scanf("%I64d%I64d",&w,&h);en=w;ans=0;query(1,n,1);printf("%I64d\n",ans);ans+=h;update(1,n,1);}}
}

Dima's got a staircase that consists of n stairs. The first stair is at height a1, the second one is at a2, the last one is at an (1 ≤ a1 ≤ a2 ≤ ... ≤ an).

Dima decided to play with the staircase, so he is throwing rectangular boxes at the staircase from above. The i-th box has width wi and height hi. Dima throws each box vertically down on the first wi stairs of the staircase, that is, the box covers stairs with numbers 1, 2, ..., wi. Each thrown box flies vertically down until at least one of the two following events happen:

  • the bottom of the box touches the top of a stair;
  • the bottom of the box touches the top of a box, thrown earlier.

We only consider touching of the horizontal sides of stairs and boxes, at that touching with the corners isn't taken into consideration. Specifically, that implies that a box with width wi cannot touch the stair number wi + 1.

You are given the description of the staircase and the sequence in which Dima threw the boxes at it. For each box, determine how high the bottom of the box after landing will be. Consider a box to fall after the previous one lands.

Input

The first line contains integer n (1 ≤ n ≤ 105) — the number of stairs in the staircase. The second line contains a non-decreasing sequence, consisting of nintegers, a1, a2, ..., an (1 ≤ ai ≤ 109ai ≤ ai + 1).

The next line contains integer m (1 ≤ m ≤ 105) — the number of boxes. Each of the following m lines contains a pair of integers wi, hi (1 ≤ wi ≤ n; 1 ≤ hi ≤ 109) — the size of the i-th thrown box.

The numbers in the lines are separated by spaces.

Output

Print m integers — for each box the height, where the bottom of the box will be after landing. Print the answers for the boxes in the order, in which the boxes are given in the input.

Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specifier.

Example

Input
5
1 2 3 6 6
4
1 1
3 1
1 1
4 3

Output
1
3
4
6

Input
3
1 2 3
2
1 1
3 1

Output
1
3

Input
1
1
5
1 2
1 10
1 10
1 10
1 10

Output
1
3
13
23
33

Note

The first sample are shown on the picture.

CodeForces - 272C Dima and Staircase (线段树区间更新)相关推荐

  1. Codeforces 444C DZY Loves Colors 线段树区间更新

    // Codeforces 444C DZY Loves Colors 线段树区间更新// 题目链接:// http://codeforces.com/problemset/problem/444/C ...

  2. hdu 5692 Snacks(dfs序+线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5692 解题思路:这道题是树节点的点权更新,而且涉及到子树,常用的思路是利用dfs序,用线段树来对区间进 ...

  3. hdu 1698(线段树区间更新)

    解题思路:线段树区间更新水题. #include<iostream> #include<cstdio> #include<cstring> using namesp ...

  4. ZOJ 1610 Count the Colors (线段树区间更新)

    题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...

  5. hdu 3966(树链剖分+线段树区间更新)

    传送门:Problem 3966 https://www.cnblogs.com/violet-acmer/p/9711441.html 学习资料: [1]线段树区间更新:https://blog.c ...

  6. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  7. Just a Hook(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 In the game of DotA, Pudge's meat hook is actual ...

  8. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,"模拟都市"是他们非常喜欢的一个游戏 ...

  9. CDOJ-1057 秋实大哥与花(线段树区间更新)

    秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

最新文章

  1. python中map()函数使用方法
  2. redis的五种数据类型及常见操作
  3. redis 源码阅读
  4. P3805 【模板】manacher算法
  5. 应对程序员面试,你必须知道的8大数据结构
  6. 5款新颖的ReSharper插件
  7. Ubuntu 12.04安装下载工具 UGet 1.8.0 及 aria2用法
  8. CAN笔记(9) 位填充
  9. python panda3d教程_panda3d基础学习
  10. php 类 private,有关php类的private属性继承问题详解
  11. c语言srand函数怎么用_Excel统计指定内容出现次数,用函数怎么写?人人都能看懂的公式...
  12. 学会Git玩转Github笔记(三)—— Github Pages 搭建个人网站
  13. Shared File System Master Slave 全配置以及测试
  14. 学c语言前要了解什么软件,学习c语言需要什么软件?
  15. idea中的万能快捷键(alt + enter)
  16. 博士毕业要发多少篇文章? 72 所高校大比较,发文最多的是……
  17. Java生成csv文件设置文本格式
  18. 用计算机处理表格说课稿,信息技术《电子表格的特点及应用》的说课稿
  19. 关于react-router-dom 6.0.1的基础写法 解决Error A <Route> is only ever to be used as the child of <Routes>
  20. 色即是空 空即是色_huadingjin_新浪博客

热门文章

  1. 保研英语自我介绍计算机,计算机保研面试英文自我介绍
  2. 共享充电宝再涨价达每小时6元 客服:市场需求决定的
  3. 专升本高数——第八章 多元函数积分学【学习笔记】
  4. 让商家“二选一“,唯品会选错了自救道路?
  5. python控制键盘输入_神技能:Python控制键盘鼠标
  6. jdon(jdong)
  7. 智能手机与个人计算机有什么区别,请问智能手机与非智能手机的区别!
  8. Unifying Task-oriented Knowledge Graph Learning and Recommendation
  9. 【Unifying Motion Deblurring and Frame Interpolation with Events】阅读笔记
  10. 《诗的格律》学习简要