Submission #133868

#TimeUsernameProblemLanguageResultExecution timeMemory
133868KastandaUFO (IZhO14_ufo)C++11
15 / 100
504 ms238184 KiB
// ItnoE
#include<bits/stdc++.h>
#define lc (id << 1)
#define rc (lc ^ 1)
#define md (l + r >> 1)
using namespace std;
int R, ts, ret[11];
struct Tree
{
    int N, * MX;
    inline Tree(int _N = 0)
    {
        N = _N;
        MX = new int [N + 3 << 1];
    }
    inline void Setter(int i, int val)
    {
        Set(i, val, 1, 1, N + 1);
    }
    inline void Getter(int val, int d)
    {
        ts = 0;
        if (d == 0)
            GetPref(val, 1, 1, N + 1);
        else
            GetSuff(val, 1, 1, N + 1);
    }
    void Set(int i, int val, int id, int l, int r)
    {
        if (r - l < 2)
            return void(MX[id] = val);
        if (i < md)
            Set(i, val, lc, l, md);
        else
            Set(i, val, rc, md, r);
        MX[id] = max(MX[lc], MX[rc]);
    }
    void GetPref(int val, int id, int l, int r)
    {
        if (MX[id] < val || ts >= R)
            return ;
        if (r - l < 2)
            return void(ret[ts ++] = l);
        GetPref(val, lc, l, md);
        GetPref(val, rc, md, r);
    }
    void GetSuff(int val, int id, int l, int r)
    {
        if (MX[id] < val || ts >= R)
            return ;
        if (r - l < 2)
            return void(ret[ts ++] = l);
        GetSuff(val, rc, md, r);
        GetSuff(val, lc, l, md);
    }
};
int main()
{
    int n, m, q, p;
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> m >> R >> q >> p;
    int A[n + 3][m + 3];
    memset(A, 0, sizeof(A));
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m; j ++)
            cin >> A[i][j];
    Tree rows[n + 3], cols[m + 3];
    for (int i = 1; i <= n; i ++)
        rows[i] = Tree(m);
    for (int i = 1; i <= m; i ++)
        cols[i] = Tree(n);
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m; j ++)
        {
            rows[i].Setter(j, A[i][j]);
            cols[j].Setter(i, A[i][j]);
        }
    for (; q; q --)
    {
        char ch;
        int id, h;
        cin >> ch >> id >> h;
        if (ch == 'W' || ch == 'E')
        {
            rows[id].Getter(h, ch == 'E');
            for (int i = 0; i < ts; i ++)
            {
                A[id][ret[i]] --;
                rows[id].Setter(ret[i], A[id][ret[i]]);
                cols[ret[i]].Setter(id, A[id][ret[i]]);
            }
        }
        else
        {
            cols[id].Getter(h, ch == 'S');
            for (int i = 0; i < ts; i ++)
            {
                A[ret[i]][id] --;
                rows[ret[i]].Setter(id, A[ret[i]][id]);
                cols[id].Setter(ret[i], A[ret[i]][id]);
            }
        }
    }
    int Mx = 0;
    for (int i = p; i <= n; i ++)
        for (int j = p; j <= m; j ++)
        {
            int SM = 0;
            for (int a = i - p + 1; a <= i; a ++)
                for (int b = j - p + 1; b <= j; b ++)
                    SM += A[a][b];
            Mx = max(Mx, SM);
        }
    return !printf("%d\n", Mx);
}

Compilation message (stderr)

ufo.cpp: In constructor 'Tree::Tree(int)':
ufo.cpp:14:25: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
         MX = new int [N + 3 << 1];
                       ~~^~~
ufo.cpp: In member function 'void Tree::Set(int, int, int, int, int)':
ufo.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define md (l + r >> 1)
             ~~^~~
ufo.cpp:32:17: note: in expansion of macro 'md'
         if (i < md)
                 ^~
ufo.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define md (l + r >> 1)
             ~~^~~
ufo.cpp:33:32: note: in expansion of macro 'md'
             Set(i, val, lc, l, md);
                                ^~
ufo.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define md (l + r >> 1)
             ~~^~~
ufo.cpp:35:29: note: in expansion of macro 'md'
             Set(i, val, rc, md, r);
                             ^~
ufo.cpp: In member function 'void Tree::GetPref(int, int, int, int)':
ufo.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define md (l + r >> 1)
             ~~^~~
ufo.cpp:44:29: note: in expansion of macro 'md'
         GetPref(val, lc, l, md);
                             ^~
ufo.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define md (l + r >> 1)
             ~~^~~
ufo.cpp:45:26: note: in expansion of macro 'md'
         GetPref(val, rc, md, r);
                          ^~
ufo.cpp: In member function 'void Tree::GetSuff(int, int, int, int)':
ufo.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define md (l + r >> 1)
             ~~^~~
ufo.cpp:53:26: note: in expansion of macro 'md'
         GetSuff(val, rc, md, r);
                          ^~
ufo.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define md (l + r >> 1)
             ~~^~~
ufo.cpp:54:29: note: in expansion of macro 'md'
         GetSuff(val, lc, l, md);
                             ^~
#Verdict Execution timeMemoryGrader output
Fetching results...