求助昨天 cf D题
  • 板块灌水区
  • 楼主__ycx2010__
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/1/25 18:43
  • 上次更新2023/10/24 03:06:28
查看原帖
求助昨天 cf D题
819929
__ycx2010__楼主2023/1/25 18:43

代码TLE了

#include <bits/stdc++.h>
using namespace std;

const int N = 50010, M = 20;
int a[N][M], s[N];
vector<int> g[M][M];

void solve()
{
    int n, m;
    scanf("%d%d", &n, &m);
    
    for (int i = 1; i <= n; i ++ )
    {
        for (int j = 1; j <= m; j ++ )
        {
            scanf("%d", &a[i][j]);
            g[j][a[i][j]].push_back(i);
        }
    }
    
    for (int i = 1; i <= n; i ++ )
    {
        int res = 0;
        for (int j = 1; j <= m; j ++ )
        {
            for (int k : g[a[i][j]][j])
                if (s[k] == j - 1)
                    s[k] ++ , res = max(res, j);
            if (res != j) break;
        }
        printf("%d ", res);
        for (int j = res; j >= 1; j -- )
            for (int k : g[a[i][j]][j])
                if (s[k] == j)
                    s[k] -- ;
    }
    
    puts("");
    
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
            g[j][a[i][j]].pop_back();
}

int main()
{
    int T;
    scanf("%d", &T);
    while (T -- ) solve();
    return 0;
}

2023/1/25 18:43
加载中...