Hdu 4419 Colourful Rectangle(矩形颜色交)

MathType 7.4保姆级安装教程:从下载到Word/WPS完美加载(附常见问题解决) 本文提供MathType 7.4的详细安装教程,涵盖从下载到Word/WPS完美加载的全过程,并附常见问题解决方案。特别针对科研写作中的公式编辑需求,介绍如何避免安装陷阱、配置Office集成及高效排版技巧,帮助用户快速掌握这一公式编辑神器。 阅读详情

传送门:Hdu 4419 Colourful Rectangle


题意:给你10000个三种颜色的矩形,不同颜色的矩形相互覆盖会形成不同的颜色,问形成的七种颜色的面积是多少。


思路:很显然,一种颜色的时候是很容易解决的(面积并)
两种颜色或以上的时候,我们可以在线段树的每个节点开三个标记(表示对应区间的某一种颜色是否出现)
利用二进制状态维护线段树中的面积交

后面利用容斥减去多余部分就可以了
R记为0,G记为1,B记为2

收获:一次扫描线只能维护一种二进制状态
思路二:用0,1,…7八个数记录节点的不同颜色的覆盖情况,每次上传时根据子节点的信息及父节点的覆盖情况算出父节点的信息即可。


#include<bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int N=1e4+100;
struct node{
    long long L,R,h;
    int flag,d;
}a[N*2],b[2*N];
char s[2];
int mark[8*N][3],t[2*N],m,Sta[8*N];
long long area[8*N][8],Ans[8];

bool cmp(const node& u,const node& v){
    if(u.h==v.h)
        return u.d>v.d;
    return u.h<v.h;
}

int L,R,d,flag,sta;

void pushup(int rt,int l,int r){
    if(Sta[rt]==sta){
        for(int i=1;i<=sta;i++)
            area[rt][i]=t[r+1]-t[l];
    }
    else if(l==r){
        int j=Sta[rt];
        memset(area[rt],0,sizeof(area[rt]));
        do{ //枚举子集
            area[rt][j]=t[r+1]-t[l];
            j=(j-1)&Sta[rt];
        }while(Sta[rt]!=j);
        area[rt][0]=t[r+1]-t[l];
    }
    else{   //其它状态
        for(int i=1;i<=sta;i++) //想得到哪一种状态
            area[rt][i]=area[rt<<1][i-(Sta[rt]&i)]+area[rt<<1|1][i-(Sta[rt]&i)];
    }
}

void update(int l,int r,int rt){
    if(L<=l&&R>=r){
        if(mark[rt][flag]==0)   //从0->1
            Sta[rt]^=(1<<flag);
        mark[rt][flag]+=d;
        if(mark[rt][flag]==0)   //从1->0
            Sta[rt]^=(1<<flag);
        pushup(rt,l,r);
        return ;
    }
    int m=(l+r)>>1;
    if(L<=m)
        update(lson);
    if(R>m)
        update(rson);
    pushup(rt,l,r);
}

void build(int l,int r,int rt){
    for(int i=1;i<=sta;i++)
        area[rt][i]=0;
    area[rt][0]=t[r+1]-t[l];
    memset(mark[rt],0,sizeof(mark[rt]));
    Sta[rt]=0;
    if(l==r)    return ;
    int m=l+r>>1;
    build(lson);
    build(rson);
}

long long solve(int n){
    build(1,m,1);
    long long ans=0,cnt=0;
    for(int i=1;i<=2*n;i++)
        if((1<<a[i].flag)&sta)
            b[++cnt]=a[i];
    for(int i=1;i<cnt;i++){
        L=lower_bound(t+1,t+m+1,b[i].L)-t,R=lower_bound(t+1,t+m+1,b[i].R)-t-1,d=b[i].d,flag=b[i].flag;
        if(L<=R)
            update(1,m,1);
        ans+=area[1][sta]*(b[i+1].h-b[i].h);
    }
    return ans;
}

int main(){
    int _,n;
    scanf("%d",&_);
    for(int case1=1;case1<=_;case1++){
        scanf("%d",&n);
        int flag,x1,x2,y1,y2;
        for(int i=1;i<=n;i++){
            scanf("%s",s);
            if(s[0]=='R')   flag=0;
            if(s[0]=='G')   flag=1;
            if(s[0]=='B')   flag=2;
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            t[i*2-1]=x1,t[i*2]=x2;
            a[i*2-1]=(node){x1,x2,y1,flag,1};
            a[i*2]=(node){x1,x2,y2,flag,-1};
        }
        sort(t+1,t+2*n+1);
        m=unique(t+1,t+2*n+1)-t-1;
        t[m+1]=t[m];
        sort(a+1,a+2*n+1,cmp);
        printf("Case %d:\n",case1);
        for(int i=1;i<=7;i++)
            sta=i,Ans[i]=solve(n);
        Ans[3]-=Ans[7],Ans[5]-=Ans[7],Ans[6]-=Ans[7];
        Ans[1]-=(Ans[3]+Ans[5]+Ans[7]);
        Ans[2]-=(Ans[3]+Ans[6]+Ans[7]);
        Ans[4]-=(Ans[6]+Ans[5]+Ans[7]);
        printf("%I64d\n%I64d\n%I64d\n%I64d\n%I64d\n%I64d\n%I64d\n",Ans[1],Ans[2],Ans[4],Ans[3],Ans[5],Ans[6],Ans[7]);
    }
    return 0;
}
小红书x-mini签名逆向实战:Frida动态Hook与算法还原 在移动App协议分析中,请求签名机制是保障接口安全的核心技术,其本质是客户端对请求参数、时间戳、设备指纹等要素进行加密认证的过程。理解签名原理需掌握Native层加密流程、JNI调用机制及密钥动态派生逻辑。Frida作为主流动态插桩工具,能绕过符号剥离、字符串加密和控制流混淆等反分析手段,在函数执行瞬间捕获寄存器状态、内存数据与调用上下文,实现签名算法的完整还原。该技术广泛应用于合规内容监测、API自动化调用与竞品协议研究等工程场景。本文聚焦小红书x-mini签名这一典型样本,详解从JNI_OnLoad定位 阅读详情

相关推荐

拓扑优化背后的科学:ANSYS Workbench中的算法与原理

本文深入解析了ANSYS Workbench中拓扑优化的科学原理与算法实现,重点介绍了密度法(SIMP)和灵敏度分析等核心算法。通过分层架构解析和参数调优实战,展示如何有效进行模型验证与多物理场耦合优化,帮助工程师提升结构设计效率与性能。

weixin_29250403的博客 400

矩形涂色问题

问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)(x2,y2)矩形指 将横坐标范围从 x1 到 x2,纵坐标范围从 y1 到 y2 之间的区域涂上颜色。 下图给出了一个画了两个矩形的例子。第一个矩形(1,1)(4, 4), 用绿色和紫色表示。第二个矩形(2, 3)(6, 5),用蓝色和紫色表示。 图中,一共有 15 个单位的面积被涂上颜色,其中紫色部分被涂了两次,但 在计...

yingmu__的博客 2063

magic-api的鉴权机制配置 (附实战代码)

引入magic-api及相关数据库驱动依赖 配置yml文件和编辑器JS文件 实现登录鉴权逻辑,包括用户验证和Token处理 接口鉴权拦截器设计,确保接口访问安全性 文章提供了完整的代码示例,帮助开发者快速集成magic-api框架并实现权限控制功能。

码农研究僧的博客 208

QML Rectangle 怎么设置颜色才不会影响子控件

组件中,并设置了其颜色为绿色。这样,子控件的颜色就不会受到父控件的影响,而保持自己设置的颜色。组件可以将一个控件从其父控件中分离出来,形成一个新的图层,并且这个图层的。因此,你可以将需要脱离父控件颜色影响的子控件放入。这样,子控件的颜色就不会受到父控件的影响,而保持自己设置的颜色。父控件不影响子控件的颜色,可以在子控件中设置。在上面的示例中,将需要脱离父控件颜色影响的。在 QML 中,可以通过设置子控件的。组件来实现不受父控件颜色影响的效果。方法一:设置子控件的。

QtCompany的博客 524

QML基础之Rectangle

导入声明:import   QtQuick 2.2 继承:Item 属性:         border  边框                     border.width : int   外边框的宽度                     border.color : color  外边框颜色         color : color     矩形颜色        

DEV_linux的专栏 1653

HDU 4419 Colourful Rectangle --离散化+线段树扫描线

题意: 有三种颜色矩形n个,不同颜色矩形重叠会生成不同的颜色,总共有R,G,B,RG,RB,GB,RGB 7种颜色,问7种颜色每种颜色的面积。 解法: 很容易想到线段树扫描线求矩形面积并,但是如何维护每种颜色的长度着实让我伤透了脑筋。后来看了一位朋友的题解,才幡然醒悟。 开始想到了用二进制表示颜色,R用001表示,G用010表示,B用100表示。那么就可以用十进制1~7表示7种不...

weixin_30500473的博客 104

QML 设置Rectangle部分边框颜色和宽度

设置Rectangle组件部分边框颜色和宽度

weixin_43400299的博客 3099

HDU4419 Colourful Rectangle(矩形面积并+线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 解析:跟一般矩形面积并有一点的区别,就是每条线的状态要用一个数组来维护,这里的depth[ i ] 表示当前状态第i中颜色的已覆盖的长度,三种基本颜色可以分别用1,2,4表示,然后通过二进制运算得到其他颜色的标号,其他也没什么了。 参考代码: #include #include #incl

fire__ice的专栏 893

hdu 4419 Colourful Rectangle(扫描线)

题意:给你10000个三种颜色矩形,不同颜色矩形相互覆盖会形成不同的颜色,问形成的七种颜色的面积是多少。 扫描线。线段树的每个节点里维护好七种颜色的长度。直接暴力跑一次即可。 #include #include #include #include #include #include using namespace std; #define LL(x) (x<<

3111

HDU - 4419 Colourful Rectangle【扫描线】

Colourful Rectangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1902    Accepted Submission(s): 792   Problem Description We use Red, Gr...

微微风簇浪,散作满河星 639

hdu 4419 Colourful Rectangle 杭州赛区 1010 (解题报告)

杭州赛区最后一题。。。。 最近看线段树还是有收获的·~~~ #include #include #include #include #define ls rt<<1 #define rs rt<<1|1 #define lson l,m,ls #define rson m+1,r,rs #define sf scanf #define pf printf using

CSUST_ACM的专栏 2114

HDU - 4419 Colourful Rectangle【扫描线.笔记】

题目链接:http://acm.hdu.edu.cn/viewcode.php?rid=32159923 题目大意:有n个矩形块,这些矩形块有R, G, B三种不同的颜色,最终区域的颜色由该区域上颜色的种类决定,要求输出 R, G, B, RG, RB, GB, RGB七种颜色的面积是多少。 思路:在前面区域覆盖面积的例题里,我们用一维数组维护被覆盖的区间长度,因为这里有颜色之分,所以可以再开一维...

qq_43803508的博客 300

HDU4419 Colourful Rectangle】 线段树面积并

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 题目大意:给你n个矩形,每个矩形都有一种颜色矩形覆盖会出现另外一种颜色,问你所有矩形中不同的颜色各出现的面积。 解题思路:开始一直只用一个标记,1,2,4,处理来处理去发现一直搞不来。最后用两个标记,一个存+1,-1,和普通面积并类似,另外开一个三位的标记数组,0位表...

baidui8622的博客 172

hdu 4419 Colourful Rectangle

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 题目大意:      给定n个矩形,矩形的长平行于x轴,宽平行于y轴,每个矩形颜色可能是R,G或B,矩形可能重叠,如果R和G(或G,R)重叠变为RG,如果三色重叠就是RGB,求所有颜色(R,G,B,RG,RB,GB,RGB)的面积. 题目思路:      很容易想到扫

Go.To.AC的专栏 645

HDU 4419 Colourful Rectangle(线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 题意:给出平面上一些矩形,这些矩形颜色有三种R、G、B。相的区域分别标记为 RG, RB, GB, RGB。输出颜色为R, G, B, RG, RB, GB, RGB的面积各为多少? 思路:设上面7种颜色的面积分别为1,2,3,4,5,6,7: a=1+2+3+4+5+6+7(把所有的...

weixin_34061042的博客 131

hdu 4419 Colourful Rectangle矩形面积并)

题意:给出红绿蓝三种颜色矩形,某些元素重叠之后会组合成其它颜色,问7种颜色的面积分别为多少。 解法:考虑只有两种颜色AB,那么求A颜色矩形的面积并x,B颜色矩形的面积并为y,AB颜色矩形的面积并为z,则最终,AB颜色的面积为x+y-z,A颜色的面积为x-(x+y-z),B颜色的面积为y-(x+y-z); 类似得,考虑三种颜色: 根据公式先求出三种颜色混和的面积x,然后依次只考虑两种

新博客地址:sensirly.github.io 2480

HDU 4419 Colourful Rectangle (线段树扫描线)

题意: 给出R,G,B三种颜色矩形的数据,求最后7种颜色(R,G,B,RG,RB,GB,RGB)的面积是多少? 分析: 显然的线段树扫描线,可以说这题非常考验对线段树扫描线的理解,如果只会用模板,恐怕很难做出来。 R,G,B三种颜色最后会产生7种颜色(无色不算),可以预见本题对编码质量要求相当之高。 update()操作和一般的线段树扫描线并无太大的不同,本题的精髓在于query()! 一般的简单扫描线甚至不用写query,因为根结点维护的区间覆盖长度就是我们所需要的。但是本题需要从复杂的信息中分出7种信

fcbruce 2034

hdu4419Colourful Rectangle(线段树+离散化+扫描线)

->题目请戳这里 题目大意:在二维平面内给n个矩形矩形有3种颜色,不同颜色的部分就产生了不同的颜色,一共就有7种颜色。对于每个区域内的颜色与某中颜色覆盖的次数无关,只与覆盖的颜色种类有关,求最后这n个矩形产生7种颜色的面积。 题目分析:这题和这道hdu1255思路基本是一样的,不过1255求的是重复覆盖2+次面积并,情况简单些,这里3种颜色就会产生7种情况,分析就稍微复杂一点点。

ophunter的专栏 1002

HDU 4419 Colourful Rectangle

分别求出7种矩形并的面积(离散化+扫描线+线段树),再根据容斥关系计算所求颜色面积。 //2012-09-24 20:30:42 Accepted 4419 359MS 4740K 2707 B G++ Aros #include #include #include #include using namespace std; const int MAXN = 10000+5, MAXM = 20

Fatal Fake Field 541

HUD-4419 Colourful Rectangle 线段树+扫描线+离散

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4419         题意:分别用R,G,B三种颜色覆盖一平面区域,不同的颜色重合会产生不同的颜色:RG,RB,BG,RGB,求最后每种颜色的面积。         矩形面积并,扫描线的加强版。线段树记录分别7重颜色的的长度,然后记录每种颜色覆盖的次数。   My code://STATUS:C++

岁月流风、、 1009

HDU 4419 Colourful Rectangle(12年杭州 线段树+离散化+扫描线)

转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526       by---cxlove  题目:给出3种颜色,重叠会生成新的颜色,然后有一些矩形,求出每种颜色的面积 http://acm.hdu.edu.cn/showproblem.php?pid=4419  很明显的矩形面积并,线段树+离散化+扫描线,

窝不是爱酱,喵~~~~ 2430

HDU-4419 Colourful Rectangle 矩形多面积并

  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419   利用二进制,R为1、G为2、B为4,然后通过异或运算可以得到其它组合颜色。建立7颗线段树,每颗线段树保存每种颜色的长度。。。 1 //STATUS:C++_AC_203MS_4780KB 2 #include <functional> 3 #inclu...

weixin_30730151的博客 118
上一篇: Hdu 3255 Farming(长方形体积并)
下一篇: 高斯消元总结
_zidaoziyan
博客等级 码龄11年 28粉丝 355原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值