Submission #132666

#TimeUsernameProblemLanguageResultExecution timeMemory
132666VardanyanTeams (CEOI11_tea)C++14
80 / 100
2549 ms71880 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1000*1000+5; pair<int,int> a[N]; int dp[5005][5005]; int tsnox[5005][5005]; int main(){ ios_base::sync_with_stdio(false); int n; cin>>n; for(int i = 1;i<=n;i++){ cin>>a[i].first; // a[i].first = rand()%4+1; a[i].second = i; } sort(a+1,a+1+n); if(n<=300){ int mx = 0; for(int i = n;i>=1;i--){ mx = max(mx,a[i].first); if((n-i+1)>=mx){ dp[i][1] = n-i+1; tsnox[i][1] = n; } } int anss = 1; for(int k = 2;k<=n;k++){ for(int i = n;i>=1;i--){ int mx = 0; /*if(i == 2){ cout<<0<<endl; }*/ for(int j = i;j<=n;j++){ mx = max(mx,a[j].first); if(dp[j+1][k-1] && (j-i+1)>=mx){ // dp[i][k] = 1; if(dp[i][k] == 0 || dp[i][k]>max(dp[j+1][k-1],j-i+1)){ dp[i][k] = max(dp[j+1][k-1],j-i+1); tsnox[i][k] = j; } // break; } } } if(!dp[1][k]) break; anss = k; } cout<<anss<<endl; int l = 1; int k = anss; while(1){ int r = tsnox[l][k]; cout<<r-l+1<<" "; for(int i = l;i<=r;i++){ cout<<a[i].second<<" "; } cout<<endl; l = r+1; if(l>n) break; k--; } return 0; } // cout<<dp[2][2]<<endl; // return 0; // cout<<anss<<" "<<dp[1][anss]<<endl; vector<vector<int> > ans; vector<int> now; int lim = n+1; for(int i = n;i>=1;i--){ if(i>=lim){ now.push_back(a[i].second); continue; } if(now.size()) ans.push_back(now); now.clear(); // lim = i-a[i].first+1; if(i-a[i].first+1<=0){ // now.push_back(a[i].second); int id = 0; for(int j = 0;j<ans.size();j++){ if(ans[id].size()>ans[j].size()) id = j; } ans[id].push_back(a[i].second); continue; } // if(now.size()) ans.push_back(now); // now.clear(); lim = i-a[i].first+1; now.push_back(a[i].second); } if(now.size()) ans.push_back(now); // if(anss!=ans.size()) assert(0); cout<<ans.size()<<endl; int mxx = 0; long long al = 0; for(int i = 0;i<ans.size();i++){ mxx = max(mxx,(int)ans[i].size()); cout<<ans[i].size()<<" "; al+=ans[i].size(); for(int j = 0;j<ans[i].size();j++) cout<<ans[i][j]<<" "; cout<<endl; } // cout<<mxx<<endl; // cout<<al<<endl;*/ return 0; }

Compilation message (stderr)

tea.cpp: In function 'int main()':
tea.cpp:82:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j = 0;j<ans.size();j++){
                           ~^~~~~~~~~~~
tea.cpp:98:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0;i<ans.size();i++){
                   ~^~~~~~~~~~~
tea.cpp:102:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j = 0;j<ans[i].size();j++) cout<<ans[i][j]<<" ";
                       ~^~~~~~~~~~~~~~
#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...