Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- struct Coor{
- ll x, y;
- ll nx, ny;
- //bool operator<(const Coor &a) const{
- //if(y==a.y){
- //return x<a.x;
- //}
- //return y<a.y;
- //}
- };
- ll n;
- vector<Coor> cd;
- vector<vector<ll>> pfs;
- ll ans;
- bool comp1(Coor a, Coor b){
- if(a.y==b.y){
- return a.x<a.y;
- }
- return a.y<b.y;
- }
- bool comp2(Coor a, Coor b){
- if(a.x==b.x){
- return a.y<b.y;
- }
- return a.x<b.x;
- }
- int main(){
- //freopen("rectangular.in", "r", stdin);
- cin >> n;
- cd.resize(n+1);
- pfs.resize(n+1, vector<ll>(n+1, 0));
- for(ll i=1; i<=n; i++){
- cin >> cd[i].x >> cd[i].y;
- }
- sort(cd.begin(), cd.end(), comp2);
- for(ll i=1; i<=n; i++){
- //cout << cd[i].x << ", " << cd[i].y << '\n';
- cd[i].nx = i;
- }
- sort(cd.begin(), cd.end(), comp1);
- for(ll i=1; i<=n; i++){
- //cout << cd[i].x << ", " << cd[i].y << '\n';
- cd[i].ny = i;
- //cout << cd[i].nx << ", " << cd[i].ny << '\n';
- pfs[cd[i].nx][cd[i].ny]++;
- }
- for(ll i=1; i<=n; i++){
- for(ll j=1; j<=n; j++){
- pfs[i][j] = pfs[i][j]+pfs[i-1][j]+pfs[i][j-1]-pfs[i-1][j-1];
- //cout << pfs[i][j] << " ";
- }
- //cout << '\n';
- }
- for(ll i=1; i<=n; i++){
- for(ll j=i+1; j<=n; j++){
- ll x1 = cd[i].nx;
- ll y1 = cd[i].ny;
- ll x2 = cd[j].nx;
- ll y2 = cd[j].ny;
- ll mnx = min(x1, x2);
- ll mny = min(y1, y2);
- ll mxx = max(x1, x2);
- ll mxy = max(y1, y2);
- ll size_left = pfs[mxx][mny]-pfs[mxx][0]-pfs[mnx-1][mny]+pfs[0][mny-1];
- ll size_right = pfs[mxx][n]-pfs[mxx][mxy-1]-pfs[mnx-1][n]+pfs[mnx-1][mxy-1];
- //cout << "mn: " << mnx << ", " << mny << '\n';
- //cout << "mx: " << mxx << ", " << mxy << '\n';
- //cout << "size_left: " << size_left << ", size_right: " << size_right << '\n';
- //cout << "size_right: " << size_right <<
- ans+=(size_left*size_right);
- }
- }
- cout << ans+n+1 << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement