Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <string>
- #include <stack>
- #include <set>
- #include <map>
- #include <unordered_map>
- #include <unordered_set>
- #include <queue>
- #include <sstream>
- #include <iterator>
- #include <iomanip>
- #include <cstdio>
- #include <climits>
- #include <cmath>
- #define forn(i, n) for (int i = 0; i < (int) n; i++)
- using namespace std;
- typedef pair<int, int> oper;
- int main()
- {
- ios_base::sync_with_stdio(false);
- int n, k;
- cin >> n >> k;
- vector <int> castle(n);
- forn(i, n)
- cin >> castle[i];
- vector <oper> ans;
- int max_height = INT_MIN;
- int min_height = INT_MAX;
- int max_ind = -1;
- int min_ind = -1;
- forn(j, n)
- if (castle[j] < min_height)
- {
- min_height = castle[j];
- min_ind = j;
- }
- forn(j, n)
- if (castle[j] >= max_height && j != min_ind)
- {
- max_height = castle[j];
- max_ind = j;
- }
- int max_diff = max_height - min_height;
- forn(i, k)
- {
- if (max_ind == min_ind)
- continue;
- castle[min_ind]++;
- castle[max_ind]--;
- int ans_x = min_ind;
- int ans_y = max_ind;
- max_height = INT_MIN;
- min_height = INT_MAX;
- max_ind = -1;
- min_ind = -1;
- forn(j, n)
- if (castle[j] < min_height)
- {
- min_height = castle[j];
- min_ind = j;
- }
- forn(j, n)
- if (castle[j] >= max_height && j != min_ind)
- {
- max_height = castle[j];
- max_ind = j;
- }
- if (max_ind == min_ind)
- continue;
- if (castle[max_ind] - castle[min_ind] <= max_diff)
- {
- ans.push_back(make_pair(ans_y, ans_x));
- max_diff = castle[max_ind] - castle[min_ind];
- }
- else
- break;
- }
- cout << max_diff << " " << ans.size() << endl;
- forn(i, ans.size())
- cout << ans[i].first + 1 << " " << ans[i].second + 1 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement