#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cctype> #include<vector> #include<cmath> #include<queue> usingnamespace std; #define int long long #define ll long long #define ri register int
constint N = 4010; constint M = 4e6 + 10; const ll INF = 1e17;
int n,m;
ll p[N][N];
intlowbit(int x){return x & (-x);}
voidmodify(int x, int y, longlong v){ for (int i = x; i < N; i += lowbit(i)){ for (int j = y; j < N; j += lowbit(j)){ p[i][j] = max(p[i][j], v); } } }
longlongquery(int x, int y){ longlong v = -1e18; for (int i = x; i > 0; i -= lowbit(i)){ for (int j = y; j > 0; j -= lowbit(j)){ v = max(v, p[i][j]); } } return v; }
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cctype> #include<vector> #include<cmath> #include<queue> usingnamespace std; #define int long long #define ll long long #define ri register int
char buf[1 << 20], *p1, *p2; #define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)?EOF: *p1++) template <typename T> inlinevoidread(T &t){ ri v = getchar();T f = 1;t = 0; while (!isdigit(v)) {if (v == '-')f = -1;v = getchar();} while (isdigit(v)) {t = t * 10 + v - 48;v = getchar();} t *= f; } template <typename T,typename... Args> inlinevoidread(T &t,Args&... args){ read(t);read(args...); }
constint N = 4010; constint M = 4e6 + 10; const ll INF = 1e17;
int n,m;
ll p[N][N];
voidinit(){ for (int i = 0;i < N;++i) { for (int j = 0;j < N;++j) { p[i][j] = -INF; } } }
intlowbit(int x){return x & (-x);}
voidmodify(int x, int y, longlong v){ for (int i = x; i < N; i += lowbit(i)){ for (int j = y; j < N; j += lowbit(j)){ p[i][j] = max(p[i][j], v); } } }
longlongquery(int x, int y){ longlong v = -1e18; for (int i = x; i > 0; i -= lowbit(i)){ for (int j = y; j > 0; j -= lowbit(j)){ v = max(v, p[i][j]); } } return v; }