POJ 3225 Help with Intervals(线段树)

【3D目标检测】环境搭建(OpenPCDet、MMdetection3d、Det3d) 在Conda虚拟环境中搭建MMdetection3d环境 阅读详情

题意:

官方有中文

思路:

首先要处理括号的问题,那么我们就可以离散下坐标,让每个坐标扩大两倍来表示,这样就能解决括号的问题了。
U:把区间[l,r]覆盖成1
I:把[-∞,l)(r,∞]覆盖成0
D:把区间[l,r]覆盖成0
C:把[-∞,l)(r,∞]覆盖成0 , 且[l,r]区间0/1互换
S:[l,r]区间0/1互换
线段树的值1,0表示这一段全为0或者1,-1表示无法确定,只要加一个异或标记就能完成所有操作,在覆盖的时候,我们可以直接覆盖掉异或标记,最后一次查询,同时用一个数组表示某个数值的状态即可

错误及反思:

离散后坐标时可能出现负数的,这里要判断下,同时,由于线段树的一些问题,数组要开大一些。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int N =131072;
bool did[131072];
int segtree[131072*5],Xor[131072*5];
void pushdown(int l,int r,int rt)
{
    if(segtree[rt]!=-1)
    {
        segtree[rt<<1]=segtree[rt];
        segtree[rt<<1|1]=segtree[rt];
        Xor[rt<<1]=0;
        Xor[rt<<1|1]=0;
        return ;
    }
    if(Xor[rt])
    {
        if(segtree[rt<<1]!=-1){
            segtree[rt<<1]^=1;
        }
        else{
            Xor[rt<<1]++;
            Xor[rt<<1]%=2;
        }
        if(segtree[rt<<1|1]!=-1){
            segtree[rt<<1|1]^=1;
        }
        else{
            Xor[rt<<1|1]++;
            Xor[rt<<1|1]%=2;
        }
        Xor[rt]=0;
    }
}
void query(int l,int r,int rt)
{
    if(segtree[rt]!=-1)
    {
        if(segtree[rt]==1)
        {
            for(int i=l;i<=r;i++)
                did[i]=true;
        }
        return ;
    }
    pushdown(l,r,rt);
    int m=(l+r)/2;
    query(lson);
    query(rson);
}
void update(int L,int R,int v,int l,int r,int rt)
{
    if(L<=l&&R>=r)
    {
        if(v==0||v==1)
        {
            segtree[rt]=v;
            Xor[rt]=0;
        }
        else
        {
            if(segtree[rt]!=-1){
                segtree[rt]^=1;
            }
            else{
                Xor[rt]++;
                Xor[rt]%=2;
            }
        }
        return ;
    }
    pushdown(l,r,rt);
    int m=(l+r)/2;
    if(L<=m) update(L,R,v,lson);
    if(R>m) update(L,R,v,rson);
    if(segtree[rt<<1]==segtree[rt<<1|1])
        segtree[rt]=segtree[rt<<1];
    else segtree[rt]=-1;
}
int main()
{
    char T[101],t[10];
    int a,b;
    while(scanf("%s %c%d%c%d%c",T,&t[0],&a,&t[1],&b,&t[2])!=EOF)
    {
        a*=2,b*=2;
        if(t[0]=='(') a++;
        if(t[2]==')') b--;
        if(a>b)
        {
            if(T[0] == 'C'||T[0] == 'I')
                update(0,N,0,0,N,1);
            continue;
        }
        if(T[0]=='U')
            update(a,b,1,0,N,1);
        else if(T[0]=='I'){
            if(a>0) update(0,a-1,0,0,N,1);
            update(b+1,N,0,0,N,1);
        }
        else if(T[0]=='D')
            update(a,b,0,0,N,1);
        else if(T[0]=='C'){
            if(a>0) update(0,a-1,0,0,N,1);
            update(b+1,N,0,0,N,1);
            update(a,b,-1,0,N,1);
        }
        else update(a,b,-1,0,N,1);
    }
    query(0,N,1);
    int num=0;
    for(int i=0;i<=N;i++)
    {
        if(did[i])
        {
            if(num) printf(" ");
            if(i%2) printf("(%d,",(i)/2);
            else printf("[%d,",(i)/2);
            num++;
            while(did[i])
                i++;
            if(i%2) printf("%d]",(i)/2);
            else printf("%d)",(i)/2);
        }
    }
    if(num==0) puts("empty set");
    else puts("");
}
C语言手写HTTPD网站服务器 零基础手写C语言http网站服务器,快速入门C/C++后端开发、服务器开发。 阅读详情

相关推荐

【高级-RAG-优化方法】

本文介绍了两种优化RAG(检索增强生成)系统的高级方法。第一部分介绍KnowFlow项目,它采用父子分块技术,将文档分为父分块(800-1500字符)和子分块(200-400字符),通过精确匹配子分块再返回父分块内容来保证搜索精确性和上下文完整性。第二部分探讨Milvus的多种增强技术,包括查询增强(如假设问题生成、回溯提示)、索引增强(自动合并块、分层索引)、检索器增强(句子窗口检索、元数据过滤)、生成器增强(提示压缩、块排序)以及管道增强(自我反省、代理查询路由)。这些方法共同提升了RAG系统的检索效率

weixin_48585108的博客 960

POJ 3225 Help with Intervals 【线段树】

题目链接 segment tree 题意 给定集合S,S最初是空集。现对其进行一些操作:与一个集合求交、并、补、对称差。用区间表示出最终的S 分析 这个题有许多注意的地方(当然可能是我写法不太好),肝了一上午…… 那么首先想到用线段树来解决这个区间覆盖的问题。虽然是实数区间,但注意到区间端点始终是整数。于是我们整体乘2,用偶数来代表整数点,用奇数来...

babao9492的博客 167

别再踩坑了!QT5.15.2配置Android开发环境保姆级避坑指南(含Java8、SDK Tools版本选择)

本文提供QT5.15.2配置Android开发环境的详细避坑指南,重点解决版本锁定、SDK工具选择和QtCreator配置等常见问题。通过实测推荐的Java8、Android SDK Tools版本及NDK配置,帮助开发者高效完成环境搭建,避免隐性冲突和配置失败。

weixin_42537919的博客 237

POJ 3225 Help with Intervals 线段树

做了好多线段树,顿时感觉线段树博大精深,虽然最基本的只是递归的更新,但是在写线段树的时候需要注意的地方真是太多太多,每个题都有自己要注意的地方,每个题都有自己的解决问题的小技巧,因而做线段树的时候需要自己对于线段树有特定的分析和不同的做法,好了感慨完了开始说题。 本题说的是对一排数进行操作,主要有四个 Operation Notation Definition

beyhhhh的博客 407

Arcmap计算土方量教程

1. 创建现状TIN 结果数据: 2. 创建设计TIN 结果数据: 注意:现状TIN和设计TIN构建时候的坐标系不同,设置坐标系见最后的注意事项第1点,就是import(导入)那步骤,现状TIN构建时选择高程点数据或者等高线数据,设计TIN构建时候选择洱海面数据 3. TIN转栅格 改成你要存的数据库,注意中间不要有汉字 结果数据(设计TIN转栅格的同理) 4. 裁剪现状TIN转成的栅格 结果数据: 5. 计算土方量 结果数据: ...

欢迎关注,共同进步! 5014

WorldQuant Brain Alpha 生成器

一个自动化工具,通过参数优化和回测来挖掘高质量的量化交易 Alpha 因子,并自动提交符合标准的因子。

weixin_37582383的博客 1万+

poj 3225 Help with Intervals(线段树)

题目链接:poj 3225 Help with Intervals 题目大意:模拟集合操作,输出最终的集合。 解题思路:线段树。 U l r:[l,r]区间置为1I l r:[0,l),(r,maxn]置为0D l r:[l,r]区间置为0C l r:[0,l),(r,maxn]置为0,[l,r]区间取逆S l r:[l,r]区间取逆。 然后基本水水的线段树,注意一下区间开

不慌不忙、不急不躁 1340

矢量网络分析仪VNA的校准之SOLT方法

作者:杭州冥鸿电子科技有限公司 邮箱:huanglong@deepelec.com S参数的测量方法有两种,一种是基于扫频测量的原理(VNA),另外一种是基于快沿阶跃响应的原理(TDR)。 下图是VNA的原理框图,主要包括以下部分: (1)激励信号源:提供感兴趣的频率范围内的入射信号; (2)信号分离装置:含功分器和定向耦合器,分离出入射,反射和传输信号; (3)接收机:...

u010018619的博客 2万+

【线段树】POJ3225 Help with intervals

【Problem】   LogLoader, Inc. is a company specialized in providing products for analyzing logs. While Ikki is working on graduation design, he is also engaged in an internship at LogLoader. Among...

a18523440518的博客 180

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1046

风光互补制氢系统动态仿真建模与性能分析

摘要 本文针对离网型风光互补制氢系统,建立了包含光伏阵列、风力发电机、PEM电解槽、储能电池和储氢罐的完整动态数学模型。基于MATLAB/Simulink平台开发了模块化仿真框架,设计了考虑电解槽最小运行功率约束的能量管理策略。通过典型日仿真分析表明,风光互补可有效平抑单一能源的功率波动,系统整体能量效率达58.7%,电解槽负荷跟随特性良好。提出的动态仿真方法为风光制氢系统的优化设计和运行控制提供了有效工具。 关键词:风光互补制氢;PEM电解槽;动态仿真;MATLAB/Simulink;能量管理

huanghm88的专栏 76

POJ3225 Help with Intervals 线段树区间更新

题目链接:http://poj.org/problem?id=3225 题目大意:给出区间操作交,并,补,差,和异或,问你在n次操作之后的区间是什么。 分析:这里我们用区间倍增来解决区间的开闭问题,然后对于每一种操作,我们用01表示该段区间是否存在。 实现代码如下: /* 倍增区间来解决区间的开闭问题,对于区间操作: U:把区间[l,r]覆盖成1 I:把[-∞,l)

AC_Gibson的专栏 619

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

算法如诗的博客 5586

Help with Intervals POJ - 3225(线段树)

线段树模拟区间的交并等操作,真是恶心的一题, #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; #define lson l,mid,rt&lt;&lt;1 #define rson mid+1,r,rt&lt;&lt;1|1 #define MAXN 131072 int cont[MAXN...

leekerian的博客 164

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

POJ-3225 Help with Intervals 线段树

题目链接:http://poj.org/problem?id=3225         题意:给你一些区间和操作,问你最后有哪些区间。         很容易把操作化简,0,1表示是否包含区间,-1表示该区间内既有包含又有不包含:                                U:把区间[l,r]覆盖成1                                I:把

岁月流风、、 973

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

POJ 3225 Help with Intervals 线段树

http://poj.org/problem?id=3225 题意: 给你一些区间的操作,要求最后的区间。初始时区间是空的。区间的长度N 思路: 本题区间的长度比较大, 如果要直接暴力的话复杂度会达到O(Q*N), 会超时。这样就需要 优化,回头考虑本题暴力的思想之所以会超时,是因为花了很多时间在区间的更新上,而且 区间的更新是每次都更新到单点,其实并不需要每次都更新到单点,这样就想到

Chris_Home 721

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【线段树】POJ3225-Help with Intervals

---恢复内容开始--- 【题目大意】 (直接引用ACM神犇概括,貌似是notonlysucess?) U:把区间[l,r]覆盖成1 I:把[-∞,l)(r,∞]覆盖成0 D:把区间[l,r]覆盖成0 C:把[-∞,l)(r,∞]覆盖成0 , 且[l,r]区间0/1互换 S:[l,r]区间0/1互换 【思路】 由于涉及到开区间和闭区间,我们如此规定数组下表: 下标...

dianchunhui2654的博客 144

poj 3225 Help with Intervals(线段树区间更新)

题意: 有5种集合运输操作,问通过这些操作,最后能得到的取决是什么。 解析:初看这题没有什么思路,参考了网络上的题解才解决了该问题。这个题目就两个关键点,搞明白就没什么问题: 关于集合运算的推导规约,知道集合是什么东西就一定会推导! U:把区间[l,r]覆盖成1 I:把[-∞,l)(r,∞]覆盖成0 D:把区间[l,r]覆盖成0 C:把[-∞,l)(r,∞]覆盖成0 , 且[l,r]区

小G的ACM之路 565

Help with Intervals POJ - 3225(线段树区间异或)

LogLoader, Inc. is a company specialized in providing products for analyzing logs. While Ikki is working on graduation design, he is also engaged in an internship at LogLoader. Among his tasks, one is...

tomjobs的博客 568

poj 3225 Help with Intervals 线段树 集合的交并差补运算

这道题感觉比之前的麻烦了很多,而且比较综合 首先,如何简单处理开区间和闭区间的问题?我是看了notonlysuccess大神的方法才知道的 将所有的数字乘以2,奇数表示开区间,偶数表示闭区间,如原来的[2,4]在线段树中则是(4,8),原来的(1,3)在线段树中是(3,5),要注意的是,如果是左开区间,则左端点的表示是该数乘以2+1,若为右开区间,则是乘以2减1,(1,3)对应(3,5)就是这...

212

POJ 3225 Help with Intervals【线段树 区间更新 异或运算】

Help with Intervals Time Limit: 6000MS   Memory Limit: 131072K Total Submissions: 11487   Accepted: 2834 Case Time Limit: 2000MS Description LogLoader, Inc. is a com

wyjwyl的专栏 734
上一篇: POJ 2528 Mayor's posters (线段树+离散)
下一篇: HDU 3333 Turing Tree(莫队+离散化)
Roll_Keyboard
博客等级 码龄9年 10粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值