Submission #537948

#TimeUsernameProblemLanguageResultExecution timeMemory
537948couplefireWombats (IOI13_wombats)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 5005;
const int M = 205;
const int MX = 1010;
const int INF = 0x3f3f3f3f;

int n, m, q;
int vert[N][M], hori[N][M], shori[N][M];
int seg[MX][M][M], best[M][M];

void calc(int f[M][M], int tl, int tr){
    memset(f, INF, sizeof(int)*M*M);
    for(int i = 1; i<=m; ++i)
        for(int j = tl; j<=tr; ++j){
            for(int k = 1; k<=m; ++k)
                f[i][k] = (j==tl?abs(shori[tl][i]-shori[tl][k]):f[i][k]+vert[j-1][k]);
            int lmn = f[i][1];
            for(int k = 2; k<=m; ++k)
                f[i][k] = min(f[i][k], lmn+shori[j][k]),
                lmn = min(lmn, f[i][k]-shori[j][k]);
            int rmn = f[i][m]+shori[j][m];
            for(int k = m-1; k>=1; --k)
                f[i][k] = min(f[i][k], rmn-shori[j][k]),
                rmn = min(rmn, f[i][k]+shori[j][k]);
        }
}

void comb(int f[M][M], int lf[M][M], int rf[M][M], int bruh[M]){
    for(int i = 1; i<=m; ++i)
        for(int j = m; j>=1; --j){
            int l = 1, r = m;
            if(i>1) l = best[i-1][j];
            if(j<m) r = best[i][j+1];
            f[i][j] = INF;
            for(int k = l; k<=r; ++k)
                if(lf[i][k]+rf[k][j]+bruh[k]<f[i][j])
                    best[i][j] = k, f[i][j] = lf[i][k]+rf[k][j]+bruh[k];
        }
}

void build(int v, int tl, int tr){
    if(tr-tl<=16)
        return calc(seg[v], tl, tr);
    int tm = (tl+tr)>>1;
    build(v<<1, tl, tm);
    build(v<<1|1, tm+1, tr);
    comb(seg[v], seg[v<<1], seg[v<<1|1], hori[tm]);
}

void upd(int pos, int v, int tl, int tr){
    if(tr-tl<=16)
        return calc(seg[v], tl, tr);
    int tm = (tl+tr)>>1;
    if(pos<=tm) upd(pos, v<<1, tl, tm);
    else upd(pos, v<<1|1, tm+1, tr);
    comb(seg[v], seg[v<<1], seg[v<<1|1], hori[tm]);
}

int main(){
    // freopen("a.in", "r", stdin);
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> m;
    for(int i = 1; i<=n; ++i)
        for(int j = 1; j<m; ++j)
            cin >> hori[i][j], shori[i][j+1] = shori[i][j]+hori[i][j];
    for(int i = 1; i<n; ++i)
        for(int j = 1; j<=m; ++j)
            cin >> vert[i][j];
    build(1, 1, n);
    cin >> q;
    while(q--){
        int t, x, y;
        cin >> t >> x >> y;
        ++x; ++y;
        if(t==1){
            int val; cin >> val;
            int dif = val-hori[x][y];
            hori[x][y] = val;
            for(int i = y+1; i<=m; ++i)
                shori[x][i] += dif;
            upd(x, 1, 1, n);
        }
        else if(t==2){
            int val; cin >> val;
            vert[x][y] = val;
            upd(x, 1, 1, n);
        }
        else 
            cout << seg[1][x][y] << '\n';
    }
}

Compilation message (stderr)

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
   15 |  int res;
      |      ^~~
/usr/bin/ld: /tmp/cciBnNGU.o: in function `main':
wombats.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccF0fkoQ.o:grader.c:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccF0fkoQ.o: in function `main':
grader.c:(.text.startup+0x129): undefined reference to `init'
/usr/bin/ld: grader.c:(.text.startup+0x194): undefined reference to `escape'
/usr/bin/ld: grader.c:(.text.startup+0x203): undefined reference to `changeH'
/usr/bin/ld: grader.c:(.text.startup+0x26d): undefined reference to `changeV'
collect2: error: ld returned 1 exit status