题意:一共有n个宿舍,每个宿舍里面有一定的房间,现在收信员送信t按照,从1-t的方式,求信最后送到哪个宿舍和哪个房间(真鸡儿难懂题意)
思路:前缀和+二分 (跑了近1.7s)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define fir first
#define sec second
#define ot(x) cout<<x<<endl;
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
int ans, cnt, m, n ,t,tt,k;
int mod=1e9+7;
const int N = 1e7;
//int a[N];
//int b[N],dp[2000][2000];
string s,ss,str;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
void solve(){
}
int main() {
// int t = 1;cin >> t;while (t--){solve();}
cin>>n>>m;
std::vector<ll> v(n);
std::vector<ll> arr(n);
ll sum=0;
for(int i=0;i<n;i++){
cin>>v[i];
arr[i]=(i==0)?v[i]:arr[i-1]+v[i];
}
while(m--){
ll t;
cin>>t;
auto index=lower_bound(all(arr),t);
int i=distance(arr.begin(),index);
cout<<i+1<<" "<<((i==0)?t:t-arr[i-1])<<endl;
}
return 0;
}