#include<stdio.h> #include<iostream> #include<cmath> #include<algorithm> using namespace std; const int N = 1e5 + 5; const int INF = 0x3f3f3f3f; struct node { int num; int sum; bool operator < (const node& s) const { return sum < s.sum; } } a[N]; int main() { int n, k; while (scanf("%d %d", &n, &k) && n != 0 && k != 0) { a[0].num = a[0].sum = 0; for (int i = 1; i <= n; i++) { int x; scanf("%d", &x); a[i].num = i; a[i].sum = x + a[i - 1].sum; } sort(a, a + n + 1); while (k--) { int t; scanf("%d", &t); int i = 0, j = 1; int lans, rans, ans, mlen = INF; while (j <= n) { int cur = a[j].sum - a[i].sum; if (abs(cur - t) < mlen) { mlen = abs(cur - t); lans = a[i].num; rans = a[j].num; ans = cur; } if (cur < t) j++; else if (cur > t) i++; else break; if (i == j) j++; } printf("%d %d %d\n", ans, min(lans, rans) + 1, max(lans, rans)); } } return 0; }
poj 2566
最新推荐文章于 2024-09-11 19:54:50 发布