Paste will expire never.
- // Очно-заочный кружок
- // Занятие №9. Дополнительные олимпиадные задачи
- // Задача B. Гражданская оборона
- // ibelyaev: 31Oct2011
- // http://cppalgo.blogspot.com/2011/04/blog-post.html
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <string>
- #include <string.h>
- #include <cmath>
- #include <queue>
- #include <vector>
- #include <map>
- #include <stdlib.h> // for exit(0)
- #include <stack>
- #include <list>
- #include <ctime>
- #include <set>
- using namespace std;
- const int MAX_VALUE = 2e9 + 1e3;
- int n,m;
- struct bomb_saver {
- int num, val;
- bomb_saver(){}
- bomb_saver(int n, int v) : num(n), val(v){}
- };
- struct bs_compare {
- bool operator () (const bomb_saver &a, const bomb_saver &b) {
- return a.val < b.val;
- }
- bool operator () (bomb_saver const &a, int val) {
- return a.val < val;
- }
- bool operator () (int val, bomb_saver const &b) {
- return val < b.val;
- }
- };
- vector<int> town;
- vector<bomb_saver> bs;
- void input(){
- scanf("%d" ,&n);
- town.resize(n);
- for (int i=0;i<n;++i)
- scanf("%d", &town[i]);
- scanf("%d", &m);
- bs.resize(m + 2);
- bs[0] = bomb_saver(-1,-MAX_VALUE);
- for (int i=1;i<=m;++i) {
- bs[i].num = i;
- scanf("%d", &bs[i].val);
- }
- bs.back() = bomb_saver(-1,MAX_VALUE);
- }
- void solve(){
- sort(bs.begin(), bs.end(), bs_compare());
- for (int i=0;i<town.size(); ++i) {
- int pos = lower_bound(bs.begin(), bs.end(), town[i], bs_compare()) - bs.begin();
- int lenF = bs[pos].val - town[i];
- int lenB = town[i] - bs[pos-1].val;
- int num = bs[pos].num;
- if (lenF > lenB) num = bs[pos-1].num;
- printf("%d ", num);
- }
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- input();
- solve();
- return 0;
- }
Editing is locked.