# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
846501 | Andrey | Soccer Stadium (IOI23_soccer) | C++17 | 433 ms | 105976 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "soccer.h"
#include<bits/stdc++.h>
using namespace std;
int haha[3001][3001];
int l[3001][3001];
int r[3001][3001];
int n;
vector<int> lol(3001);
void calc(const vector<int>& haha) {
int n = haha.size();
vector<int> bruh(n);
vector<int> wow(n);
stack<pair<int,int>> idk;
for(int i = 0; i < n; i++) {
int a = haha[i];
while(!idk.empty() && a <= idk.top().first) {
idk.pop();
}
if(idk.empty()) {
bruh[i] = (i+1)*a;
}
else {
bruh[i] = bruh[idk.top().second]+a*(i-idk.top().second);
}
idk.push({a,i});
}
while(!idk.empty()) {
idk.pop();
}
for(int i = n-1; i >= 0; i--) {
int a = haha[i];
while(!idk.empty() && a <= idk.top().first) {
idk.pop();
}
if(idk.empty()) {
wow[i] = (n-i)*a;
}
else {
wow[i] = wow[idk.top().second]+a*(idk.top().second-i);
}
idk.push({a,i});
}
for(int i = 0; i < n; i++) {
lol[i]+=bruh[i]+wow[i]-haha[i];
}
}
int biggest_stadium(int N, std::vector<std::vector<int>> f)
{
n = N;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
haha[i][j] = f[i][j];
}
}
for(int i = 0; i < n; i++) {
if(haha[i][0]) {
l[i][0] = -1;
}
else {
l[i][0] = 0;
}
for(int j = 1; j < n; j++) {
if(haha[i][j]) {
l[i][j] = -1;
}
else {
l[i][j] = l[i][j-1]+1;
}
}
if(haha[i][n-1]) {
r[i][n-1] = -1;
}
else {
r[i][n-1] = 0;
}
for(int j = n-2; j >= 0; j--) {
if(haha[i][j]) {
r[i][j] = -1;
}
else {
r[i][j] = r[i][j+1]+1;
}
}
}
int ans = 0;
for(int i = 0; i < n; i++) {
vector<int> yay(0);
vector<int> wut(0);
for(int j = 0; j < n; j++) {
if(l[j][i] == -1) {
if(yay.size() > 0) {
for(int z = 0; z < wut.size(); z++) {
lol[z] = 0;
}
calc(yay);
calc(wut);
for(int z = 0; z < wut.size(); z++) {
ans = max(ans,(int)wut.size()+lol[z]);
}
}
yay.clear();
wut.clear();
}
else {
yay.push_back(l[j][i]);
wut.push_back(r[j][i]);
}
}
if(yay.size() > 0) {
for(int z = 0; z < wut.size(); z++) {
lol[z] = 0;
}
calc(yay);
calc(wut);
for(int z = 0; z < wut.size(); z++) {
ans = max(ans,(int)wut.size()+lol[z]);
}
}
}
return ans;
}
Compilation message (stderr)
# | 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... |