SDOI2008校门外的区间

这道题作为前天的模拟赛题,考场上我在还剩一个半小时的情况下居然选择求稳打暴力,水过了40分,然后就坐看cansult和refun这俩dalaoAK...

一开始我的想法是,把区间看成两点之间不包含端点的小区间和端点构成的集合,然后分开处理,这个做法可能暴力还是可以的,然而如果要用线段树的话,就要开两颗线段树

正确做法应该是把每个点拆成三个点,)就是标记第一个点,】和【就是标记第二个点,(就是标记第三个点

然后我还把数据范围>=0看成>=1,最后的输出也很容易出错

#include<iostream>
#include<cstdio>
#include<cstring>
#define ls ((root<<1)+1)
#define rs ((root<<1)+2)
#define mid ((l+r)>>1)
using namespace std;
int N,n,a[400000];
struct order{
	int type,l,r;
}q[200001];
struct Node{
	int mul,add;
}tree[2000000];
void init(){
	char ch; int l,r;
	while (cin>>ch){
	n++;
	if (ch=='U') q[n].type=1;
	if (ch=='I') q[n].type=2;
	if (ch=='D') q[n].type=3;
	if (ch=='C') q[n].type=4;
	if (ch=='S') q[n].type=5;
	cin>>ch>>l;
	l=l*3+2+(ch=='(');
	cin>>ch>>r>>ch; 
	r=r*3+2-(ch==')');
	q[n].l=l; q[n].r=r;
	N=max(N,q[n].r);
	}
}
void pushdown(int root){
	tree[ls].add=tree[root].mul*tree[ls].add+tree[root].add;
	tree[rs].add=tree[root].mul*tree[rs].add+tree[root].add;
	tree[ls].mul*=tree[root].mul;
	tree[rs].mul*=tree[root].mul;
	tree[root].add=0;
	tree[root].mul=1;
}
void Mul(int root,int l,int r,int l1,int r1,int val){
	if (l>=l1&&r<=r1){;
		tree[root].mul*=val;
		tree[root].add*=val; 
		return;
	}
	pushdown(root);
	if (l1<=mid) Mul(ls,l,mid,l1,r1,val);
	if (r1>mid) Mul(rs,mid+1,r,l1,r1,val);
}
void Add(int root,int l,int r,int l1,int r1,int val){
	if (l>=l1&&r<=r1){;
		tree[root].add+=val; 
		return;
	}
	pushdown(root);
	if (l1<=mid) Add(ls,l,mid,l1,r1,val);
	if (r1>mid) Add(rs,mid+1,r,l1,r1,val);
}
int query(int root,int l,int r,int pos){
	if (l==r) return tree[root].add;
	pushdown(root);
	if (pos<=mid) return query(ls,l,mid,pos);
	else return query(rs,mid+1,r,pos);
}
void build(int root,int l,int r){
	tree[root].mul=1;
	if (l==r){
		tree[root].add=-1;
		return;
	}
	build(ls,l,mid);
	build(rs,mid+1,r);
}
int main(){
	init();
	int i,l,r,j;
	build(0,0,N);
	for (i=1;i<=n;i++){
		if (q[i].type==1){
			Mul(0,0,N,q[i].l,q[i].r,0);
			Add(0,0,N,q[i].l,q[i].r,1);
			continue;
		}
		if (q[i].type==2){
			if (q[i].l>=1) {
			    Mul(0,0,N,1,q[i].l-1,0);
				Add(0,0,N,1,q[i].l-1,-1);
			}
			if (q[i].r<N){
				Mul(0,0,N,q[i].r+1,N,0);
				Add(0,0,N,q[i].r+1,N,-1);
			}
			continue;
		}
		if (q[i].type==3){
			Mul(0,0,N,q[i].l,q[i].r,0);
			Add(0,0,N,q[i].l,q[i].r,-1);
			continue;
		}
		if (q[i].type==4){
			if (q[i].l>=1) {
			    Mul(0,0,N,1,q[i].l-1,0);
				Add(0,0,N,1,q[i].l-1,-1);
			}
			if (q[i].r<N){
				Mul(0,0,N,q[i].r+1,N,0);
				Add(0,0,N,q[i].r+1,N,-1);
			}
			Mul(0,0,N,q[i].l,q[i].r,-1);
			continue;
		}
		Mul(0,0,N,q[i].l,q[i].r,-1);
	}
	bool flag=1;
	for (i=1;i<=N;i++){
	  a[i]=query(0,0,N,i);
	  if (a[i]==1) flag=0;
	}
	if (flag){
		cout<<"empty set";
		return 0;
	}
	a[N+1]=-1;
	for (i=1;i<=N;i++){
		if (a[i]==-1) continue;
		l=i;
		for (i=l+1;i<=N+1;i++)//这个地方要开到N+1,因为如果开到N,a[N]!=-1时会出错 
		  if (a[i]==-1) break;
		r=--i;
		char c1=(l%3==2)?'[':'(',c2=(r%3==2)?']':')';
		printf("%c%d,%d%c ",c1,(l-1)/3,(r-1)/3,c2);
	}
	return 0;
}


标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
### 关于校门外的树 用户提到的内容涉及两段关于编程实现的描述,主要围绕如何通过程序解决“校门外的树”的问题。然而,当前提问似乎更倾向于探讨与园风景或文学描述相关的主题。 如果从文学角度出发,“校门外的树”可以被赋予更多的象征意义和情感表达。以下是对此话题的一个深入分析: #### 文学视角下的“校门外的树” 在园文化中,树木常常作为记忆和成长的象征物存在。它们不仅美化环境,还承载着学生时代的点滴回忆。例如,在许多文学作品中,大树往往代表着坚韧不拔的精神以及时间流逝中的永恒感[^3]。 对于“校门外的树”,可以从以下几个方面展开讨论: - **自然之美**:这些树可能是梧桐、银杏或者樱花树等特定种类,每种植物都有其独特的形态美和季节变化特征。春天的新绿、夏日浓荫、秋天金黄落叶以及冬日枝桠上的霜雪,构成了四季分明的画面。 - **人文价值**:除了视觉享受外,这类景观还能激发人们的思考。比如站在门口的大树下送别毕业生时所产生的离愁别绪;又或者是每天经过这里上下课形成的一种规律生活节奏所带来的安全感。 - **社会功能**:在学周边种植大量绿化植被有助于改善空气质量并提供遮阳避暑的好去处。同时也能促进师生之间的交流互动——想象一下午后阳光洒满草地旁高大乔木间的情景吧! 下面给出一段简单的伪代码来模拟计算未砍伐树木数量的过程(基于前面技术部分的理解),虽然这不是重点但可以帮助理解原始背景信息: ```c #include <stdio.h> int main(){ int length, regions; scanf("%d%d", &length, ®ions); // 创建数组表示道路状态,默认全为存活(0) char roadState[length+1]; for(int i=0;i<=length;i++)roadState[i]=0; while(regions--){ int start,end; scanf("%d%d",&start,&end); // 将指定区间内的值设为已移除(-1 或其他标志位) for(int pos=start;pos<=end;pos++) roadState[pos]=-1; } int remainingTreesCount=0; for(int idx=0;idx<=length;idx++) if(roadState[idx]==0)remainingTreesCount++; printf("%d\n",remainingTreesCount); } ``` #### 结论 综上所述,“校门外的树”不仅仅是一个算法练习题那么简单,它还可以延伸到更加广阔的文化领域当中去探索发现更多有意思的话题点子出来呢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值