Submission #155804

# Submission time Handle Problem Language Result Execution time Memory
155804 2019-09-30T15:54:41 Z vanic Rectangles (IOI19_rect) C++14
59 / 100
5000 ms 1029152 KB
#include "rect.h"
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#include <unordered_map>
#include <map>
#include <stack>
#include <set>
#include <array>
 
using namespace std;
 
typedef long long ll;
const int maxn=2521;
 
int n, m;
int l[maxn][maxn];
//vector < int > r[maxn][maxn], c[maxn][maxn];
unordered_map < int, int > r[maxn][maxn], c[maxn][maxn];
int rind[maxn][maxn], cind[maxn][maxn];
pair < int, int > red[maxn][maxn], stup[maxn][maxn];
//int bio2[maxn][maxn], bio3[maxn][maxn];
vector < array < int, 4 > > bio;

 
void upd1(int x){
	stack < pair < int, int > > q;
	q.push(make_pair(1e8, -1));
	for(int i=0; i<m; i++){
		while(q.top().first<=l[x][i]){
			q.pop();
		}
		red[x][i].first=q.top().second+1;
		q.push(make_pair(l[x][i], i));
	}
	while(!q.empty()){
		q.pop();
	}
	q.push(make_pair(1e8, m));
	for(int i=m-1; i>-1; i--){
		while(q.top().first<=l[x][i]){
			q.pop();
		}
		red[x][i].second=q.top().second-1;
		if(r[red[x][i].first][red[x][i].second].find(x)==r[red[x][i].first][red[x][i].second].end()){
//			bio2[red[x][i].first][red[x][i].second]=x+1;
			r[red[x][i].first][red[x][i].second][x]=r[red[x][i].first][red[x][i].second][rind[red[x][i].first][red[x][i].second]]+1;
			rind[red[x][i].first][red[x][i].second]=x;
		}
		q.push(make_pair(l[x][i], i));
	}
}
 
void upd2(int x){
	stack < pair < int, int > > q;
	q.push(make_pair(1e8, -1));
	for(int i=0; i<n; i++){
		while(q.top().first<=l[i][x]){
			q.pop();
		}
		stup[i][x].first=q.top().second+1;
		q.push(make_pair(l[i][x], i));
	}
	while(!q.empty()){
		q.pop();
	}
	q.push(make_pair(1e8, n));
	for(int i=n-1; i>-1; i--){
		while(q.top().first<=l[i][x]){
			q.pop();
		}
		stup[i][x].second=q.top().second-1;
		if(c[stup[i][x].first][stup[i][x].second].find(x)==c[stup[i][x].first][stup[i][x].second].end()){
//			bio3[stup[i][x].first][stup[i][x].second]=x+1;
			c[stup[i][x].first][stup[i][x].second][x]=c[stup[i][x].first][stup[i][x].second][cind[stup[i][x].first][stup[i][x].second]]+1;
			cind[stup[i][x].first][stup[i][x].second]=x;
		}
		q.push(make_pair(l[i][x], i));
	}
}
 
 
int binary(int x, vector < int > &l){
	int lo=0, hi=l.size(), mid;
	while(lo<hi){
		mid=(lo+hi)/2;
		if(l[mid]<x){
			lo=mid+1;
		}
		else{
			hi=mid;
		}
	}
	return lo;
}
 
void provjeri(int x, int y){
	int r1, r2, c1, c2;
	r1=red[x][y].first;
	r2=red[x][y].second;
	c1=stup[x][y].first;
	c2=stup[x][y].second;
	if(r1==0 || c1==0 || r2==m-1 || c2==n-1){
		return;
	}
//	int pos1=binary(c1, r[r1][r2]);
//	int pos2=binary(r1, c[c1][c2]);
	if(r[r1][r2].find(c2)!=r[r1][r2].end() && r[r1][r2].find(c1)!=r[r1][r2].end()
	&& c[c1][c2].find(r2)!=c[c1][c2].end() && c[c1][c2].find(r1)!=c[c1][c2].end()
	&& r[r1][r2][c2]-r[r1][r2][c1]==c2-c1 && c[c1][c2][r2]-c[c1][c2][r1]==r2-r1){
		bio.push_back({r1, r2, c1, c2});
	}
}
 
long long count_rectangles(vector < vector < int > > a){
	n=a.size();
	m=a[0].size();
	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			l[i][j]=a[i][j];
		}
	}
	for(int i=0; i<n; i++){
		upd1(i);
	}
	for(int i=0; i<m; i++){
		upd2(i);
	}
	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			provjeri(i, j);
		}
	}
	sort(bio.begin(), bio.end());
	bio.erase(unique(bio.begin(), bio.end()), bio.end());
	return bio.size();
}
 
/*
int main(){
	scanf("%d%d", &n, &m);
	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			scanf("%d", &l[i][j]);
		}
	}
	for(int i=0; i<n; i++){
		upd1(i);
	}
	for(int i=0; i<m; i++){
		upd2(i);
	}
	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			provjeri(i, j);
		}
	}
	sort(bio.begin(), bio.end());
	bio.erase(unique(bio.begin(), bio.end()), bio.end());
	printf("%d\n", bio.size());
	return 0;
}*/
# Verdict Execution time Memory Grader output
1 Correct 698 ms 696948 KB Output is correct
2 Correct 729 ms 697596 KB Output is correct
3 Correct 733 ms 697712 KB Output is correct
4 Correct 724 ms 697616 KB Output is correct
5 Correct 737 ms 697168 KB Output is correct
6 Correct 770 ms 697652 KB Output is correct
7 Correct 789 ms 697564 KB Output is correct
8 Correct 693 ms 697436 KB Output is correct
9 Correct 696 ms 697656 KB Output is correct
10 Correct 813 ms 697592 KB Output is correct
11 Correct 741 ms 697668 KB Output is correct
12 Correct 747 ms 697564 KB Output is correct
13 Correct 773 ms 696824 KB Output is correct
14 Correct 800 ms 697108 KB Output is correct
15 Correct 693 ms 696952 KB Output is correct
16 Correct 699 ms 696888 KB Output is correct
17 Correct 714 ms 696896 KB Output is correct
18 Correct 697 ms 696768 KB Output is correct
19 Correct 698 ms 697444 KB Output is correct
20 Correct 701 ms 697308 KB Output is correct
21 Correct 698 ms 696992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 698 ms 696948 KB Output is correct
2 Correct 729 ms 697596 KB Output is correct
3 Correct 733 ms 697712 KB Output is correct
4 Correct 724 ms 697616 KB Output is correct
5 Correct 737 ms 697168 KB Output is correct
6 Correct 770 ms 697652 KB Output is correct
7 Correct 789 ms 697564 KB Output is correct
8 Correct 693 ms 697436 KB Output is correct
9 Correct 696 ms 697656 KB Output is correct
10 Correct 813 ms 697592 KB Output is correct
11 Correct 741 ms 697668 KB Output is correct
12 Correct 747 ms 697564 KB Output is correct
13 Correct 773 ms 696824 KB Output is correct
14 Correct 800 ms 697108 KB Output is correct
15 Correct 693 ms 696952 KB Output is correct
16 Correct 699 ms 696888 KB Output is correct
17 Correct 702 ms 699596 KB Output is correct
18 Correct 715 ms 699440 KB Output is correct
19 Correct 748 ms 699580 KB Output is correct
20 Correct 714 ms 698948 KB Output is correct
21 Correct 703 ms 699404 KB Output is correct
22 Correct 710 ms 699384 KB Output is correct
23 Correct 705 ms 699384 KB Output is correct
24 Correct 715 ms 698744 KB Output is correct
25 Correct 714 ms 696896 KB Output is correct
26 Correct 697 ms 696768 KB Output is correct
27 Correct 698 ms 697444 KB Output is correct
28 Correct 701 ms 697308 KB Output is correct
29 Correct 698 ms 696992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 698 ms 696948 KB Output is correct
2 Correct 729 ms 697596 KB Output is correct
3 Correct 733 ms 697712 KB Output is correct
4 Correct 724 ms 697616 KB Output is correct
5 Correct 737 ms 697168 KB Output is correct
6 Correct 770 ms 697652 KB Output is correct
7 Correct 789 ms 697564 KB Output is correct
8 Correct 693 ms 697436 KB Output is correct
9 Correct 696 ms 697656 KB Output is correct
10 Correct 813 ms 697592 KB Output is correct
11 Correct 741 ms 697668 KB Output is correct
12 Correct 747 ms 697564 KB Output is correct
13 Correct 773 ms 696824 KB Output is correct
14 Correct 800 ms 697108 KB Output is correct
15 Correct 693 ms 696952 KB Output is correct
16 Correct 699 ms 696888 KB Output is correct
17 Correct 702 ms 699596 KB Output is correct
18 Correct 715 ms 699440 KB Output is correct
19 Correct 748 ms 699580 KB Output is correct
20 Correct 714 ms 698948 KB Output is correct
21 Correct 703 ms 699404 KB Output is correct
22 Correct 710 ms 699384 KB Output is correct
23 Correct 705 ms 699384 KB Output is correct
24 Correct 715 ms 698744 KB Output is correct
25 Correct 743 ms 706780 KB Output is correct
26 Correct 738 ms 706768 KB Output is correct
27 Correct 769 ms 706804 KB Output is correct
28 Correct 719 ms 703736 KB Output is correct
29 Correct 750 ms 706452 KB Output is correct
30 Correct 789 ms 706552 KB Output is correct
31 Correct 751 ms 706220 KB Output is correct
32 Correct 758 ms 706064 KB Output is correct
33 Correct 714 ms 696896 KB Output is correct
34 Correct 697 ms 696768 KB Output is correct
35 Correct 698 ms 697444 KB Output is correct
36 Correct 701 ms 697308 KB Output is correct
37 Correct 698 ms 696992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 698 ms 696948 KB Output is correct
2 Correct 729 ms 697596 KB Output is correct
3 Correct 733 ms 697712 KB Output is correct
4 Correct 724 ms 697616 KB Output is correct
5 Correct 737 ms 697168 KB Output is correct
6 Correct 770 ms 697652 KB Output is correct
7 Correct 789 ms 697564 KB Output is correct
8 Correct 693 ms 697436 KB Output is correct
9 Correct 696 ms 697656 KB Output is correct
10 Correct 813 ms 697592 KB Output is correct
11 Correct 741 ms 697668 KB Output is correct
12 Correct 747 ms 697564 KB Output is correct
13 Correct 773 ms 696824 KB Output is correct
14 Correct 800 ms 697108 KB Output is correct
15 Correct 693 ms 696952 KB Output is correct
16 Correct 699 ms 696888 KB Output is correct
17 Correct 702 ms 699596 KB Output is correct
18 Correct 715 ms 699440 KB Output is correct
19 Correct 748 ms 699580 KB Output is correct
20 Correct 714 ms 698948 KB Output is correct
21 Correct 703 ms 699404 KB Output is correct
22 Correct 710 ms 699384 KB Output is correct
23 Correct 705 ms 699384 KB Output is correct
24 Correct 715 ms 698744 KB Output is correct
25 Correct 743 ms 706780 KB Output is correct
26 Correct 738 ms 706768 KB Output is correct
27 Correct 769 ms 706804 KB Output is correct
28 Correct 719 ms 703736 KB Output is correct
29 Correct 750 ms 706452 KB Output is correct
30 Correct 789 ms 706552 KB Output is correct
31 Correct 751 ms 706220 KB Output is correct
32 Correct 758 ms 706064 KB Output is correct
33 Correct 1323 ms 793108 KB Output is correct
34 Correct 1227 ms 793080 KB Output is correct
35 Correct 1215 ms 793212 KB Output is correct
36 Correct 1128 ms 793076 KB Output is correct
37 Correct 1336 ms 771388 KB Output is correct
38 Correct 1351 ms 771256 KB Output is correct
39 Correct 1361 ms 771388 KB Output is correct
40 Correct 1280 ms 767436 KB Output is correct
41 Correct 1002 ms 736792 KB Output is correct
42 Correct 1097 ms 742764 KB Output is correct
43 Correct 1601 ms 776136 KB Output is correct
44 Correct 1645 ms 777156 KB Output is correct
45 Correct 1123 ms 743312 KB Output is correct
46 Correct 1127 ms 739128 KB Output is correct
47 Correct 1525 ms 770268 KB Output is correct
48 Correct 1547 ms 770348 KB Output is correct
49 Correct 714 ms 696896 KB Output is correct
50 Correct 697 ms 696768 KB Output is correct
51 Correct 698 ms 697444 KB Output is correct
52 Correct 701 ms 697308 KB Output is correct
53 Correct 698 ms 696992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 758 ms 707852 KB Output is correct
2 Correct 728 ms 706316 KB Output is correct
3 Correct 702 ms 697184 KB Output is correct
4 Correct 699 ms 697088 KB Output is correct
5 Correct 735 ms 706964 KB Output is correct
6 Correct 733 ms 706964 KB Output is correct
7 Correct 781 ms 707032 KB Output is correct
8 Correct 855 ms 706228 KB Output is correct
9 Correct 843 ms 706072 KB Output is correct
10 Correct 752 ms 702456 KB Output is correct
11 Correct 706 ms 705336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 699 ms 697188 KB Output is correct
2 Correct 2834 ms 861184 KB Output is correct
3 Execution timed out 5143 ms 1029152 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 698 ms 696948 KB Output is correct
2 Correct 729 ms 697596 KB Output is correct
3 Correct 733 ms 697712 KB Output is correct
4 Correct 724 ms 697616 KB Output is correct
5 Correct 737 ms 697168 KB Output is correct
6 Correct 770 ms 697652 KB Output is correct
7 Correct 789 ms 697564 KB Output is correct
8 Correct 693 ms 697436 KB Output is correct
9 Correct 696 ms 697656 KB Output is correct
10 Correct 813 ms 697592 KB Output is correct
11 Correct 741 ms 697668 KB Output is correct
12 Correct 747 ms 697564 KB Output is correct
13 Correct 773 ms 696824 KB Output is correct
14 Correct 800 ms 697108 KB Output is correct
15 Correct 693 ms 696952 KB Output is correct
16 Correct 699 ms 696888 KB Output is correct
17 Correct 702 ms 699596 KB Output is correct
18 Correct 715 ms 699440 KB Output is correct
19 Correct 748 ms 699580 KB Output is correct
20 Correct 714 ms 698948 KB Output is correct
21 Correct 703 ms 699404 KB Output is correct
22 Correct 710 ms 699384 KB Output is correct
23 Correct 705 ms 699384 KB Output is correct
24 Correct 715 ms 698744 KB Output is correct
25 Correct 743 ms 706780 KB Output is correct
26 Correct 738 ms 706768 KB Output is correct
27 Correct 769 ms 706804 KB Output is correct
28 Correct 719 ms 703736 KB Output is correct
29 Correct 750 ms 706452 KB Output is correct
30 Correct 789 ms 706552 KB Output is correct
31 Correct 751 ms 706220 KB Output is correct
32 Correct 758 ms 706064 KB Output is correct
33 Correct 1323 ms 793108 KB Output is correct
34 Correct 1227 ms 793080 KB Output is correct
35 Correct 1215 ms 793212 KB Output is correct
36 Correct 1128 ms 793076 KB Output is correct
37 Correct 1336 ms 771388 KB Output is correct
38 Correct 1351 ms 771256 KB Output is correct
39 Correct 1361 ms 771388 KB Output is correct
40 Correct 1280 ms 767436 KB Output is correct
41 Correct 1002 ms 736792 KB Output is correct
42 Correct 1097 ms 742764 KB Output is correct
43 Correct 1601 ms 776136 KB Output is correct
44 Correct 1645 ms 777156 KB Output is correct
45 Correct 1123 ms 743312 KB Output is correct
46 Correct 1127 ms 739128 KB Output is correct
47 Correct 1525 ms 770268 KB Output is correct
48 Correct 1547 ms 770348 KB Output is correct
49 Correct 758 ms 707852 KB Output is correct
50 Correct 728 ms 706316 KB Output is correct
51 Correct 702 ms 697184 KB Output is correct
52 Correct 699 ms 697088 KB Output is correct
53 Correct 735 ms 706964 KB Output is correct
54 Correct 733 ms 706964 KB Output is correct
55 Correct 781 ms 707032 KB Output is correct
56 Correct 855 ms 706228 KB Output is correct
57 Correct 843 ms 706072 KB Output is correct
58 Correct 752 ms 702456 KB Output is correct
59 Correct 706 ms 705336 KB Output is correct
60 Correct 699 ms 697188 KB Output is correct
61 Correct 2834 ms 861184 KB Output is correct
62 Execution timed out 5143 ms 1029152 KB Time limit exceeded
63 Halted 0 ms 0 KB -