Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- #include <vector>
- #include <map>
- using namespace std;
- int n, ms, res;
- map<int, bool> g[3000];
- map<int, bool> og[3000];
- bool vis[3000];
- bool dn[3000];
- int gg(int cs)
- {
- for (int i = 0; i < n; i++)
- {
- g[i].clear();
- copy(og[i].begin(), og[i].end(), g[i].begin());
- dn[i] = false;
- }
- int rc = 0;
- bool nr = false;
- while (!nr)
- {
- nr = true;
- for (int i = 0; i < n; i++)
- {
- if (g[i].size() >= cs || dn[i])
- continue;
- dn[i] = true;
- rc++;
- for (map<int, bool>::iterator j = g[i].begin(); j != g[i].end(); j++)
- {
- cout << j->first;
- // g[j->first].erase(i);
- }
- }
- }
- return rc;
- }
- void bs(int s, int e)
- {
- if (s > e)
- return;
- int mid = (s + e) / 2;
- int rc = gg(mid);
- if (rc < n)
- bs(s, mid - 1);
- else
- {
- ms = mid;
- bs(mid + 1, e);
- }
- }
- int maximum_deevs(vector<int> v)
- {
- n = v.size();
- res = 0;
- for (int i = 0; i < n; i++)
- g[i].clear();
- memset(vis, 0, sizeof(vis));
- int cm;
- for (int i = 0; i < n; i++)
- {
- cm = 0;
- for (int j = i + 1; j < n; j++)
- {
- if (v[j] >= cm)
- {
- og[i][j] = true;
- og[j][i] = true;
- cm = v[j];
- }
- }
- }
- ms = 0;
- bs(0, n - 1);
- return res;
- }
- int main()
- {
- ifstream cin("in.txt");
- int n, curr;
- cin >> n;
- vector<int> iv;
- for (int i = 0; i < n; i++)
- {
- cin >> curr;
- iv.push_back(curr);
- }
- cout << maximum_deevs(iv);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement