제출 #1190001

#제출 시각아이디문제언어결과실행 시간메모리
1190001alexddRectangles (IOI19_rect)C++20
0 / 100
76 ms147784 KiB
#include "rect.h" #include<bits/stdc++.h> using namespace std; vector<pair<int,int>> get_bune(vector<int> v) { vector<pair<int,int>> bune; deque<int> dq; for(int i=0;i<v.size();i++) { while(!dq.empty() && v[i] >= v[dq.back()]) { if(dq.back()+1 <= i-1) bune.push_back({dq.back()+1,i-1}); dq.pop_back(); } if(!dq.empty() && dq.back()+1 <= i-1) bune.push_back({dq.back()+1,i-1}); dq.push_back(i); } sort(bune.begin(),bune.end()); return bune; } vector<pair<int,int>> bune_pe_rand[2505]; vector<int> coloane_bune[2505][2505]; long long count_rectangles(std::vector<std::vector<int>> a) { long long rez=0; for(int i=1;i+1<a.size();i++) { bune_pe_rand[i] = get_bune(a[i]); } for(int i=1;i+1<a[0].size();i++) { vector<int> aux; for(int j=0;j<a.size();j++) aux.push_back(a[j][i]); vector<pair<int,int>> bune = get_bune(aux); for(auto [x,y]:bune) coloane_bune[x][y].push_back(i); } for(int sus=1;sus+1<a.size();sus++) { vector<pair<int,int>> candidati = bune_pe_rand[sus]; for(int jos=sus;jos+1<a.size();jos++) { vector<pair<int,int>> newc; int pozc=0,pozr=0; while(pozc < candidati.size() && pozr < bune_pe_rand[jos].size()) { if(candidati[pozc] == bune_pe_rand[jos][pozr]) { newc.push_back(candidati[pozc]); pozc++; pozr++; } else if(candidati[pozc] < bune_pe_rand[jos][pozr]) { pozc++; } else { pozr++; } } candidati = newc; for(auto [x,y]:candidati) { int cnt=0; for(int c:coloane_bune[sus][jos]) if(x<=c && c<=y) cnt++; if(cnt == y-x+1) rez++; } } } return rez; } /* ne fixam linia de sus apoi mergem cu linia de jos in jos, o sa avem la inceput O(N) perechi de coloane candidate cand adaugam o linie in jos o sa dezactivam niste perechi de coloane trebuie sa verificam pt fiecare (sus,jos) care coloane sunt bune asta o sa fie O(N^2), pt ca fiecare coloana o sa apara in O(N) (sus,jos)-uri facem un dsu in care tinem si candidatii de perechi de coloane si cam asta e tot sper */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...