Advertisement
tepyotin2

Rectangular Pasture

Jun 20th, 2025
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6.  
  7. struct Coor{
  8.     ll x, y;
  9.     ll nx, ny;
  10.     //bool operator<(const Coor &a) const{
  11.         //if(y==a.y){
  12.             //return x<a.x;
  13.         //}
  14.         //return y<a.y;
  15.     //}
  16. };
  17.  
  18. ll n;
  19. vector<Coor> cd;
  20. vector<vector<ll>> pfs;
  21. ll ans;
  22.  
  23. bool comp1(Coor a, Coor b){
  24.     if(a.y==b.y){
  25.         return a.x<a.y;
  26.     }
  27.     return a.y<b.y;
  28. }
  29.  
  30. bool comp2(Coor a, Coor b){
  31.     if(a.x==b.x){
  32.         return a.y<b.y;
  33.     }
  34.     return a.x<b.x;
  35. }
  36.  
  37. int main(){
  38.     //freopen("rectangular.in", "r", stdin);
  39.    
  40.     cin >> n;
  41.     cd.resize(n+1);
  42.     pfs.resize(n+1, vector<ll>(n+1, 0));
  43.     for(ll i=1; i<=n; i++){
  44.         cin >> cd[i].x >> cd[i].y;
  45.     }
  46.     sort(cd.begin(), cd.end(), comp2);
  47.     for(ll i=1; i<=n; i++){
  48.         //cout << cd[i].x << ", " << cd[i].y << '\n';
  49.         cd[i].nx = i;
  50.     }
  51.     sort(cd.begin(), cd.end(), comp1);
  52.     for(ll i=1; i<=n; i++){
  53.         //cout << cd[i].x << ", " << cd[i].y << '\n';
  54.         cd[i].ny = i;
  55.         //cout << cd[i].nx << ", " << cd[i].ny << '\n';
  56.         pfs[cd[i].nx][cd[i].ny]++;
  57.     }
  58.     for(ll i=1; i<=n; i++){
  59.         for(ll j=1; j<=n; j++){
  60.             pfs[i][j] = pfs[i][j]+pfs[i-1][j]+pfs[i][j-1]-pfs[i-1][j-1];
  61.             //cout << pfs[i][j] << " ";
  62.         }
  63.         //cout << '\n';
  64.     }
  65.     for(ll i=1; i<=n; i++){
  66.         for(ll j=i+1; j<=n; j++){
  67.             ll x1 = cd[i].nx;
  68.             ll y1 = cd[i].ny;
  69.             ll x2 = cd[j].nx;
  70.             ll y2 = cd[j].ny;
  71.             ll mnx = min(x1, x2);
  72.             ll mny = min(y1, y2);
  73.             ll mxx = max(x1, x2);
  74.             ll mxy = max(y1, y2);
  75.             ll size_left = pfs[mxx][mny]-pfs[mxx][0]-pfs[mnx-1][mny]+pfs[0][mny-1];
  76.             ll size_right = pfs[mxx][n]-pfs[mxx][mxy-1]-pfs[mnx-1][n]+pfs[mnx-1][mxy-1];
  77.             //cout << "mn: " << mnx << ", " << mny << '\n';
  78.             //cout << "mx: " << mxx << ", " << mxy << '\n';
  79.             //cout << "size_left: " << size_left << ", size_right: " << size_right << '\n';
  80.             //cout << "size_right: " << size_right <<
  81.             ans+=(size_left*size_right);
  82.         }
  83.     }
  84.     cout << ans+n+1 << '\n';
  85.    
  86.     return 0;
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement