#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; template istream& operator >> (istream& is, vector& vec){for(T& val: vec) is >> val; return is;} template istream& operator , (istream& is, T& val){ return is >> val;} template ostream& operator << (ostream& os, vector& vec){for(int i=0; i ostream& operator , (ostream& os, T& val){ return os << " " << val;} template ostream& operator >> (ostream& os, T& val){ return os << " " << val;} bool is_kadomatsu_sequence(vector x){ if(x.size() != 3) return false; if(x[0] < x[1] && x[1] > x[2] && x[2] != x[0]) return true; if(x[0] > x[1] && x[1] < x[2] && x[2] != x[0]) return true; return false; } template class SparseTable{ int col; int row; T default_value; vector* values; vector> table; static T default_evaluate(T a, T b){ return min(a,b); } function evaluate; public: SparseTable(int len, T default_value_ = 100000000, function eval = default_evaluate) : col(len), default_value(default_value_) { evaluate = eval; row = 1; while((1<>(row, vector(col, default_value)); } SparseTable(vector& vec, T default_value_ = 100000000, function eval = default_evaluate) : col(vec.size()), default_value(default_value_){ evaluate = eval; row = 1; while((1<>(row, vector(col, default_value)); set(vec); } void set(vector& vec){ assert(col == vec.size()); values = &vec; vector& val = vec; iota(table[0].begin(), table[0].end(), 0); for(int k=1; k=r) return default_value; vector& val = *values; T ret = default_value; int k = 0; while((1<<(k+1)) < (r-l)) k++; T left = val[ table[k][l] ]; T right = val[ table[k][r-(1<> n,m; vector> a(m, vector(n)); //cin >> a; for(int i=0; i my_min = [&](int l, int r){return min(l,r);}; function my_max = [&](int l, int r){return max(l,r);}; long long max_ = 0; int val = 0; for(int i=0; i st_min(a[i], 2000, my_min); SparseTable st_max(a[i], -1, my_max); long long sum = 0; for(int x=0; x l < r if(x>0){ int z = st_max.get(0,x); if(z > l){ int hoge = max(z, r); if(ans r if(x>0){ int z = st_min.get(0,x); if(z < l){ int hoge = l; if(ans 1){ // l < z > r int z = st_max.get(l+1, r); if(z > max(l,r)){ int hoge = z; if(ans z < r z = st_min.get(l+1, r); if(z < min(l,r)){ int hoge = max(l,r); if(ans z if(n-r > 1){ int z = st_min.get(r+1, n); if(z < r){ int hoge = r; if(ans r < z if(n-r > 1){ int z = st_max.get(r+1, n); if(z > r){ int hoge = max(l,z); if(ans