我靠刚才我打了一大段字,结果发布了之后,csdn居然不给我保留修改的痕迹。。。
题目网址在此。
没什么好说的,简单的一道二分搜索。
诡异的是,是我的ubuntu里的gcc,在我没有添加二分函数里的
return left
的情况下,居然会主动帮我返回left。
而CF上的编译器就不会(这才是正常的吧!)
莫非gcc有魔法已经看穿了我的返回值,擅自主张帮我设置了?
改天要好好看看汇编出来的代码
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
typedef long long ll;
ll dorm[2000010] = {0};
int GE_LOWERBOUND( ll arr[], int l, int r, ll val ){
int mid;
while( l<r ){
mid = l + (r-l) / 2;
if( arr[mid] < val )
l = mid+1;
else
r = mid;
}
return l;
}
int main(){
int n,m;
ll totalid;
ll idorm, iroom;
cin >> n >> m;
for( int i = 1; i <= n; i++ ){
cin >> dorm[i];
dorm[i] += dorm[i-1];
}
while( m-- ){
cin >> totalid;
idorm = GE_LOWERBOUND( dorm, 1, n+1, totalid );
printf("%lld %lld\n", idorm, totalid-dorm[idorm-1] );
}
return 0;
}