Submission #164244

#TimeUsernameProblemLanguageResultExecution timeMemory
164244luciocfTeams (CEOI11_tea)C++14
0 / 100
2555 ms70716 KiB
#include <bits/stdc++.h> #define ff first #define ss second using namespace std; const int maxn = 1e6+10; int n; pair<int, int> a[maxn]; int dp[maxn], opt[maxn]; pair<int, int> tree[4*maxn]; vector<int> team[maxn]; void upd(int node, int l, int r, int pos, int v) { if (l == r) { tree[node] = {v, l}; return; } int mid = (l+r)>>1; if (pos <= mid) upd(2*node, l, mid, pos, v); else upd(2*node+1, mid+1, r, pos, v); tree[node] = max(tree[2*node], tree[2*node+1]); } pair<int, int> query(int node, int l, int r, int a, int b) { if (l > b || r < a) return {0, 0}; if (l >= a && r <= b) return tree[node]; int mid = (l+r)>>1; return max(query(2*node, l, mid, a, b), query(2*node+1, mid+1, r, a, b)); } int qtd(int k) { memset(dp, 0, sizeof dp); memset(opt, 0, sizeof opt); for (int i = 1; i <= 4*n; i++) tree[i] = {0, 0}; for (int i = 1; i <= n; i++) { pair<int, int> pp = query(1, 1, n, max(1, i-k), i-a[i].ff); dp[i] = 1+pp.first, opt[i] = pp.second; upd(1, 1, n, i, dp[i]); } return dp[n]; } int main(void) { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i].ff); a[i].ss = i; } sort(a+1, a+n+1); int ans = qtd(n); int ini = 1, fim = n, ans2 = n; while (ini <= fim) { int mid = (ini+fim)>>1; if (qtd(mid) == ans) ans2 = mid, fim = mid-1; else ini = mid+1; } qtd(ans2); int aux = 0; for (int i = n; i >= 1; ) { ++aux; int j; for (j = i; j > opt[i]; j--) team[aux].push_back(a[j].ss); i = j; } printf("%d\n", ans); for (int i = 1; i <= ans; i++) { printf("%d", team[i].size()); for (auto x: team[i]) printf(" %d", x); printf("\n"); } }

Compilation message (stderr)

tea.cpp: In function 'int main()':
tea.cpp:107:30: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type {aka long unsigned int}' [-Wformat=]
   printf("%d", team[i].size());
                ~~~~~~~~~~~~~~^
tea.cpp:66:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
  ~~~~~^~~~~~~~~~
tea.cpp:70:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &a[i].ff);
   ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...