제출 #1291424

#제출 시각아이디문제언어결과실행 시간메모리
1291424hahaStar triangles (IZhO11_triangle)C++20
0 / 100
158 ms327680 KiB
#include <bits/stdc++.h>
#define ll long long
#define f first
#define s second
using namespace std;
const int maxn=2e5+5;

int n;
int x[maxn],y[maxn];
vector<int> nen;
vector<vector<int>> a,sum;

int get(int i,int j,int u,int v)
{
    return sum[u][v]-sum[i-1][v]-sum[u][j-1]+sum[i-1][j-1];
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
        nen.push_back(x[i]);
        nen.push_back(y[i]);
    }
    sort(nen.begin(),nen.end());
    nen.erase(unique(nen.begin(),nen.end()),nen.end());
    int maxX=0,maxY=0;
    for(int i=1;i<=n;i++){
        x[i]=lower_bound(nen.begin(),nen.end(),x[i])-nen.begin()+1;
        y[i]=lower_bound(nen.begin(),nen.end(),y[i])-nen.begin()+1;
        maxX=max(maxX,x[i]);
        maxY=max(maxY,y[i]);
    }
    a.assign(maxX+1,vector<int>(maxY+1,0));
    sum.assign(maxX+1,vector<int>(maxY+1,0));
    for(int i=1;i<=n;i++){
        a[x[i]][y[i]]=1;
    }
    for(int i=1;i<=maxX;i++){
        for(int j=1;j<=maxY;j++){
            sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
        }
    }
    ll ans=0;
    for(int i=1;i<=maxX;i++){
        for(int j=1;j<=maxY;j++){
            if(a[i][j]==1){
                int right=0,left=0,up=0,down=0;
                if(j+1<=maxY) right=get(i,j+1,i,maxY);
                if(j-1>=1) left=get(i,1,i,j-1);
                if(i-1>=1) up=get(1,j,i-1,j);
                if(i+1<=maxX) down=get(i+1,j,maxX,j);
                ans+=1LL*right*down;
                ans+=1LL*down*left;
                ans+=1LL*left*up;
                ans+=1LL*up*right;
            }
        }
    }
    cout<<ans;

}
#Verdict Execution timeMemoryGrader output
Fetching results...