Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <vector>
- #include <cstdio>
- #include <string>
- #include <algorithm>
- #include <queue>
- #include <map>
- #include <set>
- using namespace std;
- bool cmp(pair <int, int> &a, pair <int, int> &b) {
- return a.second < b.second;
- }
- int n, average;
- vector <pair<int, int>> d;
- vector <pair<int, int> > ans;
- int bin_search(int l, int r, int value) {
- while (l < r) {
- int mid = l + (r - l) / 2;
- if (d[mid].second - value <= 0) {
- l = mid+1;
- }
- else {
- r = mid;
- }
- }
- return r;
- }
- int main() {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- scanf("%d%d", &n, &average);
- ans = vector<pair<int, int>>(n, make_pair(0, 0));
- for (int i = 0; i < n; ++i) {
- int curd;
- scanf("%d", &curd);
- if (curd != average) {
- d.push_back(make_pair(i + 1, curd));
- }
- }
- sort(d.begin(), d.end(), cmp);
- for (int i = 0; i < d.size(); ++i) {
- if (d[i].second == average)
- break;
- else {
- int ind = bin_search(i+1, d.size(), average - d[i].second);
- ans[d[i].first - 1] = make_pair(d[ind].first, average - d[i].second);
- d[ind].second -= average - d[i].second;
- d[i].second = average;
- }
- }
- for (auto it : ans) {
- printf("%d %d\n", it.first, it.second);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement