Submission #143403

#TimeUsernameProblemLanguageResultExecution timeMemory
143403model_codeRectangles (IOI19_rect)C++17
59 / 100
1366 ms1048580 KiB
// incorrect/rect-peyman-n3-opt.cpp

//In the name of God
//Peyman Jabbarzade Ganje
//Boarder shouldn't be equal with inside
#include<bits/stdc++.h>
#define X first
#define Y second
using namespace std;
typedef pair<int, int> pii;

const int maxn = 3000 + 10, maxx=1e7;
int n,m;
long long ans;
vector<int>vec, nozoli, will_remove;
map<int, int> fp[maxn][maxn];
vector<pii> sp[2][maxn][maxn];

void add_pair(int type, int lvl, int l, int r)
{
	int tmp = 1;
	if(fp[lvl][l].find(r) != fp[lvl][l].end())
		tmp += fp[lvl][l][r];

	if(type == 0) {
		if(r-l-1>0)
			sp[type][lvl+1][r].push_back(pii(r-l-1, tmp));
	}
	else {
		if(r-l-1>0)
			sp[type][r][lvl+1].push_back(pii(tmp, r-l-1));
	}

	fp[lvl+1][l][r] = tmp;
}

void extract_pairs(int type, int lvl)
{
	nozoli.clear();
	for(int i=0;i<vec.size();i++)
	{
		int last=-1;
		while(nozoli.size() && vec[nozoli.back()] < vec[i])
		{
			if(vec[nozoli.back()] > last)
				add_pair(type, lvl, nozoli.back(), i);
			last = vec[nozoli.back()];
			nozoli.pop_back();
		}
		if(nozoli.size()) add_pair(type, lvl, nozoli.back(), i);
		nozoli.push_back(i);
	}
}

long long count_rectangles(vector<vector<int> >a)
{
	n = a.size();
	m = a[0].size();

	for(int i=0;i<n;i++)
	{
		vec.clear();
		for(int j=0;j<m;j++)
			vec.push_back(a[i][j]);
		extract_pairs(0,i);
	}
	for(int i=0;i<=n;i++)
		for(int j=0;j<=m;j++)
		fp[i][j].clear();

	for(int j=0;j<m;j++)
	{
		vec.clear();
		for(int i=0;i<n;i++)
			vec.push_back(a[i][j]);
		extract_pairs(1,j);
	}

	int tt = 0;

	for(int i=0;i<=max(n,m);i++) {
		for(int j=0;j<=max(n,m);j++) {
//			cerr << "(" << sp[0][i][j].size() << "," << sp[1][i][j].size() << ") ";
			if(sp[0][i][j].size() && sp[1][i][j].size())
			{
				// sp[0].X fix sp[1].X moteghaier
				for(int x=0;x<sp[0][i][j].size();x++)
					for(int y=0;y<sp[1][i][j].size();y++) {
						tt++;
						if(sp[0][i][j][x].X <= sp[1][i][j][y].X && sp[0][i][j][x].Y >= sp[1][i][j][y].Y)
							ans ++;
					}
			}
		}
//		cerr << endl;
	}
	return ans;
}

Compilation message (stderr)

rect.cpp: In function 'void extract_pairs(int, int)':
rect.cpp:40:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<vec.size();i++)
              ~^~~~~~~~~~~
rect.cpp: In function 'long long int count_rectangles(std::vector<std::vector<int> >)':
rect.cpp:87:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int x=0;x<sp[0][i][j].size();x++)
                 ~^~~~~~~~~~~~~~~~~~~
rect.cpp:88:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
      for(int y=0;y<sp[1][i][j].size();y++) {
                  ~^~~~~~~~~~~~~~~~~~~
#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...