在一所大学中有n幢公寓,从 1 标记到 n,第 i 幢公寓有 ai 个房间。每个房间都有一个门牌号,从 1 标记到 a_1 + a_2 + \dots + a_na1+a2+⋯+an,1号表示第1幢楼第一个房间,a_1a1 号表示第1幢楼最后一个房间,a_1 + 1a1+1 号表示第2幢楼第一个房间,以此类推, a_1 + a_2 + \dots + a_na1+a2+⋯+an 表示第 n 幢楼最后一个房间
现在有 m 封信送到学校,每个信封上都有着一个门牌号,你的任务是将这些信分类,辨别它们属于第几幢楼的第几个房间
Input
第一行输入两个整数 nn, mm (1 \le n, m \le 2 \cdot 10^{5})(1≤n,m≤2⋅105),分别代表公寓个数和信封个数
第二行输入 n 个整数 a_1, a_2, \dots, a_na1,a2,…,an (1 \le a_i \le 10^{10})(1≤ai≤1010),表示每幢公寓的房间数
第三行输入 m 个整数 b_1, b_2, \dots, b_mb1,b2,…,bm (1 \le b_j \le a_1 + a_2 + \dots + a_n)(1≤bj≤a1+a2+⋯+an) 表示每封信上的门牌号,b_jbj 按照递增顺序给出
Output
输出m行,每行有两个整数 f, k 分别表示第 f 幢楼的第 k 个房间
Examples
Input
3 6
10 15 12
1 9 12 23 26 37
Output
1 1
1 9
2 2
2 13
3 1
3 12
Input
2 3
5 10000000000
5 6 9999999999
Output
1 5
2 1
2 9999999994
#include<iostream>
using namespace std;
const int N=2e6;
long long a[N],b[N],s[N];
int main(){
int n,m;
long long k=0;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
int j=1;
for(int i=1;i<=m;i++){
cin>>b[i];
for(;j<=n;j++)
{
if(b[i]<=s[j]&&b[i]>s[j-1])
{
k=b[i]-s[j-1];
cout<<j<<" "<<k<<endl;
break;
}
}
}
return 0;
}