https://www.luogu.com.cn/record/132606750
#3提示 Wrong Answer.wrong output format Expected integer, but ":" found
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
const int MAXN = 55, MAXM = 4005;
inline void readint(int &var){
char reg;
do{ reg = getchar(); }while(reg < '0' || reg > '9');
do{
var = (var << 1) + (var << 3) + (reg ^ 48);
reg = getchar();
}while('0' <= reg && reg <= '9');
}
void writeint(int val){
if(val <= 10)
putchar(val ^ 48);
else{
writeint(val / 10);
putchar((val % 10) ^ 48);
}
}
struct Node{
int a, b, c;
inline void read(){ readint(a); readint(b); readint(c); }
}ns[MAXM];
int n, m, dp[MAXN][MAXN][MAXM], v, suf[MAXN][MAXN][MAXM], lis[MAXM], ll, cnt[MAXM], nps[MAXM], nval;
int spli[MAXN][MAXN][MAXM], sufi[MAXN][MAXN][MAXM], ansl[MAXN];
vector<int>ps;
map<int, int>np;
void rev(int lt, int rt, int minval){
if(lt > rt)
return;
int rmx = sufi[lt][rt][minval];
int mid = spli[lt][rt][rmx];
if(!mid){
for(int i = lt; i <= rt; ++i)
ansl[i] = 500000;
return;
}
ansl[mid] = nps[rmx];
rev(lt, mid - 1, rmx);
rev(mid + 1, rt, rmx);
}
int main(){
ios::sync_with_stdio(false);
readint(n); readint(m);
for(int i = 0; i < m; ++i){
ns[i].read();
ps.push_back(ns[i].c);
}
sort(ps.begin(), ps.end());
ps.erase(unique(ps.begin(), ps.end()), ps.end());
v = ps.size();
for(int i = 0; i < v; ++i)
nps[i] = ps[i];
for(int i = 0; i < v; ++i)
np[nps[i]] = i;
for(int i = 0; i < m; ++i)
ns[i].c = np[ns[i].c];
for(int i = 0; i < n; ++i)
for(int l = 1, r = i + 1; r <= n; ++l, ++r){
ll = 0;
for(int j = 0; j < m; ++j)
if(l <= ns[j].a && ns[j].b <= r)
lis[ll++] = j;
for(int j = l; j <= r; ++j){
for(int k = 0; k < v; ++k)
cnt[k] = 0;
for(int k = 0; k < ll; ++k)
if(ns[lis[k]].a <= j && ns[lis[k]].b >= j)
++cnt[ns[lis[k]].c];
for(int k = v - 2; k >= 0; --k)
cnt[k] += cnt[k + 1];
for(int k = 0; k < v; ++k){
nval = suf[l][j - 1][k] + suf[j + 1][r][k] + cnt[k] * nps[k];
if(nval > dp[l][r][k]){
dp[l][r][k] = nval;
spli[l][r][k] = j;
}
}
}
for(int j = v - 1; j >= 0; --j){
if(dp[l][r][j] < suf[l][r][j + 1]){
suf[l][r][j] = suf[l][r][j + 1];
sufi[l][r][j] = sufi[l][r][j + 1];
}else{
suf[l][r][j] = dp[l][r][j];
sufi[l][r][j] = j;
}
}
}
writeint(suf[1][n][0]);
putchar('\n');
rev(1, n, 0);
for(int i = 1; i <= n; ++i){
writeint(ansl[i]);
putchar(' ');
}
putchar('\n');
fflush(stdout);
return 0;
}