zoukankan      html  css  js  c++  java
  • CF1190D Tokitsukaze and Strange Rectangle

    传送门

    很简单的一个题目

    由于向上是无限延伸的,所以我们从上往下考虑,然后对于每个(x)坐标,我们只用管它是否出现过。

    统计答案就是按每个(y)坐标来统计,

    如果只有一个点,直接计算当前出现的所有(x)的本质不同的区间覆盖的方案数就行了

    但是现在有一个问题,对于同一个(y)坐标,(x)坐标可能不同,也就是可能有多个点,会算重。

    然后我们选区间一定是要包含这一排中至少一个点,也就是去掉那些不合法的就行了。

    好像讲的不清楚,但是我也没办法。

    代码:

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<map>
    using namespace std;
    #define rg register
    #define lowbit(i) (i&(-i))
    void read(int &x){
        char ch;bool ok;
        for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')ok=1;
        for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok)x=-x;
    }
    const int maxn=1e6+10,N=1e6;
    int n,m,now,t[maxn],f[maxn];map<int,int>mp;
    long long ans;
    struct oo{int x,y;}a[maxn];bool vis[maxn];
    bool cmp(oo a,oo b){return a.y==b.y?a.x<b.x:a.y>b.y;}
    void add(int x){for(rg int i=x;i<=now;i+=lowbit(i))f[i]++;}
    int get(int x){int ans=0;for(rg int i=x;i;i-=lowbit(i))ans+=f[i];return ans;}
    long long C(int x){return 1ll*x*(x-1)/2;}
    int main(){
        read(n);
        for(rg int i=1;i<=n;i++){
    	read(a[i].x),read(a[i].y);
    	t[++m]=a[i].x,t[++m]=a[i].y;
        }
        sort(a+1,a+n+1,cmp),sort(t+1,t+m+1);
        for(rg int i=1;i<=m;i++)if(t[i]!=t[i-1])mp[t[i]]=++now;
        for(rg int i=1;i<=n;i++)a[i].x=mp[a[i].x],a[i].y=mp[a[i].y];
        for(rg int i=1,j;i<=n;i=j){
    	j=i+1;int tot=get(now);
    	while(a[j].y==a[i].y)j++;
    	for(rg int k=i;k<j;k++)
    	    if(!vis[a[k].x])vis[a[k].x]=1,tot++,add(a[k].x);
    	ans+=C(tot+1);
    	for(rg int k=i;k<j-1;k++)ans-=C(get(a[k+1].x-1)-get(a[k].x)+1);
    	ans-=C(get(a[i].x-1)+1),ans-=C(get(now)-get(a[j-1].x)+1);
        }
        printf("%lld
    ",ans);
    }
    
  • 相关阅读:
    context:component-scan报错
    goland 实用键
    React-Native 指定模拟器RUN-IOS
    mac 卸载编辑器卸不干净
    go 区分指针
    go 学习Printf
    我的命令行
    mysql8的坑
    小三角
    eslint 禁用命令
  • 原文地址:https://www.cnblogs.com/lcxer/p/11313146.html
Copyright © 2011-2022 走看看