- 题意:给你n个宿舍楼,一个含有n个元素的数组代表每个宿舍楼一共有几个房间。再给你m个查询,m个元素按递增输入。查询第m个房间所属的宿舍喽和具体房间号。
通过的代码:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=2e5+6;
ll a[N],sum[N];
int main(){
ios::sync_with_stdio(false);cin.tie(0);
ll n,m;cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i],sum[i]=sum[i-1]+a[i];
while(m--){
ll x;cin>>x;
if(x==sum[n])cout<<n<<" "<<a[n]<<endl;
else {
int pos=upper_bound(sum+1,sum+n+1,x)-sum;
if(sum[pos-1]==x)cout<<pos-1<<" "<<a[pos-1]<<endl;
else cout<<pos<<" "<<x-sum[pos-1]<<endl;
}
}
}