이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#include "rect.h"
using namespace std;
using ll = long long;
// O(nlogn)
vector<pair<int, int>> get_segments(vector<int> &a) {
vector<pair<int, int>> res, b;
int n = (int)a.size();
for(int i = 0; i < n; i++) {
b.push_back({a[i], i});
}
sort(b.rbegin(), b.rend());
set<int> st;
for(auto [x, pos] : b) {
st.insert(pos);
auto it = st.lower_bound(pos);
if(it != st.begin()) {
auto lb = it; lb--;
if(*it - *lb > 1)
res.push_back({*lb + 1, *it - 1});
}
if(it != (--st.end())) {
auto rb = it; rb++;
if(*rb - *it > 1)
res.push_back({*it + 1, *rb - 1});
}
}
return res;
}
ll count_rectangles(vector<vector<int>> a) {
int n = (int)a.size(), m = (int)a[0].size();
if(n == 3) {
auto seg = get_segments(a[1]);
int pre[m] = {};
for(int i = 0; i < m; i++) {
pre[i] = (a[1][i] < min(a[0][i], a[2][i]));
if(i) pre[i] += pre[i - 1];
}
int res = 0;
for(auto [l, r] : seg) {
int g = pre[r] - (l ? pre[l - 1] : 0);
if(g == r - l + 1)
res++;
}
return res;
}
return 1;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |