Submission #597672

#TimeUsernameProblemLanguageResultExecution timeMemory
597672FatihSolakRectangles (IOI19_rect)C++17
18 / 100
5103 ms320248 KiB
#include "rect.h"
#include <bits/stdc++.h>
#define N 2505
using namespace std;
struct BIT{
	vector<int> bit;
	int n;
	BIT(int size){
		n = size;
		bit.assign(n+5,0);
	}
	void upd(int pos,int val){
		for(++pos;pos<n;pos += pos & -pos){
			bit[pos] += val;
		}
	}
	int get(int pos){
		int ret = 0;
		for(++pos;pos > 0;pos -= pos & -pos){
			ret += bit[pos];
		}
		return ret;
	}
	int get(int l,int r){
		return get(r) - get(l-1);
	}
};
struct SegTree{
	vector<BIT> t;
	int n;
	SegTree(int size){
		n = size + 5;
		t.assign(4*n,BIT(n));
	}
	void upd(int v,int tl,int tr,int l,int r,int val){
		t[v].upd(r,val);
		if(tl == tr)return;
		int tm = (tl + tr)/2;
		if(l <= tm){
			upd(v*2,tl,tm,l,r,val);
		}
		else upd(v*2+1,tm+1,tr,l,r,val);
	}
	int get(int v,int tl,int tr,int l,int r){
		if(tr <= l){
			return t[v].get(r,n-1);
		}
		if(tl > l){
			return 0;
		}
		int tm = (tl + tr)/2;
		return get(v*2,tl,tm,l,r) + get(v*2+1,tm+1,tr,l,r);
	}
	void upd(int l,int r,int val){
		upd(1,0,n-1,l,r,val);
	}
	int get(int l,int r){
		return get(1,0,n-1,l,r);
	}
};
int mp[N][N];
vector<int> pos[N];
vector<int> prepos[N];
vector<pair<int,int>> ranges[N][N];
vector<pair<int,int>> queries[N][N];
long long count_rectangles(vector<vector<int>> a){
	int n = a.size();
	int m = a[0].size();
    long long ans = 0;
	for(int r1 = 1;r1<=n-2;r1++){
        for(int r2 = r1;r2 <= n-2;r2++){
            for(int c1 = 1;c1<=m-2;c1++){
                for(int c2 = c1;c2 <= m-2;c2++){
                    bool ok = 1;
                    for(int i = r1;i<=r2;i++){
                        for(int j = c1;j<=c2;j++){
                            ok &= a[i][j] < min({a[i][c1-1],a[i][c2+1],a[r1-1][j],a[r2+1][j]});
                        }
                    }
                    ans += ok;
                }
            }
        }
    }
	return ans;
}
#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...