`
java-mans
  • 浏览: 11391885 次
文章分类
社区版块
存档分类
最新评论

HFUT 1287 法默尔的农场 [安徽省第三届省赛]

 
阅读更多

转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove

题目:http://acm.hfut.edu.cn/OnlineJudge/

当时比赛最悲剧的一题,大约花了两个小时,最终也没能AC。

唯一值得安慰的是,我成功的想到了用线段树来解,但是悲剧也在这,虽然如此但是没有过,好可惜。

题目没有更新,只有查询,这让我忽视了边查询边更新,只在查询上优化,最终导致悲剧。

吸取教训啊,线段树就一定要发挥他的优势才行。

题目中文的,就不解释了。

保存区间的最大值和最小值,那么如果水位低于最小值则说明区间内都没有被淹,如果大于最大值则说明区间内全被淹,否则查询子区间。

由于递归到子区间的时候,两个区间相邻的部分可能形成一个岛,所以还得记录区间的两端是否被淹没。(这些我当时都考虑到了,用位运算+标记成功完成)

离线查询,按高度递增查询,便可以更新区间最小值,剔除部分区间。

比赛的时候只考虑到 1 1W 1 1W 1 1W这样的坑爹数据,便想到用离散化来优化,结果还是悲剧了,哎。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 1<<30
using namespace std;
struct Line{
	int left,right,mid;
	int mmax,mmin;
	int lx,mx,rx;
}L[100005];
struct Node{
	int h,id;
}Q[20005];
int a[20005];
void bulid(int step,int l,int r){
	L[step].left=l;
	L[step].right=r;
	L[step].mid=(l+r)/2;
	L[step].lx=L[step].mx=L[step].rx=1;
	if(l==r){
		L[step].mmax=L[step].mmin=a[l];	
		return;
	}
	bulid(2*step,l,(l+r)/2);
	bulid(2*step+1,(l+r)/2+1,r);
	L[step].mmax=max(L[step*2].mmax,L[2*step+1].mmax);
	L[step].mmin=min(L[step*2].mmin,L[2*step+1].mmin);
}
void update(int step){
	L[step].mx=L[2*step].mx+L[2*step+1].mx-(L[2*step].rx&L[2*step+1].lx);
	L[step].lx=L[2*step].lx;
	L[step].rx=L[2*step+1].rx;
}
void query(int step,int h){
	if(h<L[step].mmin)
		return ;
	if(h>=L[step].mmax){
		L[step].mmin=inf;
		L[step].rx=L[step].lx=L[step].mx=0;
		return ;
	}
	query(2*step,h);
	query(2*step+1,h);
	update(step);
	if(L[2*step].mmin==inf)
		L[step].mmin=L[2*step+1].mmin;
	else if(L[2*step+1].mmin==inf)
		L[step].mmin=L[2*step].mmin;
	else
		L[step].mmin=min(L[2*step].mmin,L[2*step+1].mmin);
}
bool cmp(Node n1,Node n2){
	return n1.h<n2.h;
}
int ans[20005];
int main(){
	int n,q;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	bulid(1,1,n);
	scanf("%d",&q);
	for(int i=0;i<q;i++){
		scanf("%d",&Q[i].h);
		Q[i].id=i;
	}
	sort(Q,Q+q,cmp);
	for(int i=0;i<q;i++){
		query(1,Q[i].h);
		ans[Q[i].id]=L[1].mx;
	}
	for(int i=0;i<q;i++)
		printf("%d\n",ans[i]);
	return 0;
}
/*
10
6 2 9 8 10 1 5 3 9 7
2
5
4
*/




分享到:
评论

相关推荐

    数据库课程设计报告HFUT 其他高校也适用

    该课程设计使用C#语言, VS2012环境开发,主要参照《数据库系统概论》( 高等教育出版社 第4版) 王珊、萨师煊主编,这是一门经典教材。萨老师是数据库的鼻祖,有幸学到开山之人的经典著作,学习真是一种享受。...

    hfut_api_service:基于koa的hfut教务 api server

    hfut_api_service 开发/使用文档基于koa的hfut教务api服务。...JavaScript 实现框架: 参考项目: 项目结构参考这个 项目结构参考这个...依赖的第三方npm包我就不加蓝链了,都是github上搜出来第一个koa基本框架 koa-ro

    hfut通信系统综合设计

    labview;包括正弦波收发和广播接收机;HFUT;

    java第二次作业_hfut_hfutjava2_

    hfut java第二次作业设计一个包含5个类的Java程序,名为Person的父类有两个子类,学生类Student和员工类Employee。Employee类有两个子类,教师类Faculty和 职员类Staff。所有人都有编号ID、姓名、地址、电话号码和...

    hfut操作系统22级分布式课程作业

    hfut(合肥工业大学)22级分布式课程最后一次作业,仅供参考,免费下载

    HFUT计网试卷需要的可以下载

    该试卷是HFUT的历年的计网试卷,低调

    PyPI 官网下载 | hfut-2.1.1.tar.gz

    资源来自pypi官网。 资源全名:hfut-2.1.1.tar.gz

    HFUT 微机原理与接口技术设计课程实验报告

    HFUT 微机原理与接口技术设计课程实验报告

    hfut 集电 嵌入式实验 2021实验.rar

    hfut 集电 嵌入式实验,实验不难,自己写一下也挺好的,如果有时间的话

    合肥工业大学毕业设计(论文)模板-HFUT_Thesis.zip

    合肥工业大学毕业设计(论文)模板-HFUT_Thesis

    2022hfut机器学习.zip

    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的...

    lib-hfut:贵校课程资料民间整理

    lib-hfut 贵校课程资料民间整理Catalogue | | | | |Preface来到一所大学,从第一次接触许多课,直到一门一门完成,这个过程中我们时常收集起许多资料和情报。有些是需要在网上搜索的电子书,每次见到一门新课程,...

    HFUT JAVA 4_hfutjava4_

    使用 字符流和和GUI类 编程实现以下功能:(1)设计图形化界面,至少包括文本类控件类。接收从键盘输入姓名、学号、成绩,并保存到文本文件中,重复进行。(2)从文件中读取各学生的成绩,并计算所有学生成绩的平均...

    HFUT JAVA 5_hfutjava5_

    说明并尝试通过URL从服务器上读取一个文本文件,并显示该文本文件的内容。5. 编写程序,用Socket通信机制在服务器和客户端之间传输文件。

    HFUT_CHINA_2015:HFUT_China 2015 团队 iGEM 项目

    HFUT_China 2015 团队 iGEM 项目

    HFUT JAVA 1_HFUTJAVA1_

    5. 用do…while 循环,计算1!+2!+…+100!的总和。6. 编写一个Java程序,输出全部希腊字母。(提示:从’ α’到’ ω’)

    HFUT计网1000页PPT复习资料

    资源好不好自己下载才知道,1000页ppt我汇总了很长时间,最后把这些做成一个思维导图,这样看起来思维脉络十分清晰,看起来会非常有帮助。尤其是对于复习的时候,是非常好的资源。资源总共分为七章,每一章我都做成...

    HFUT-计算机组成原理实验报告1

    图1.7 选择文件 开始仿真切换到 Library,然后展开 work 目录,在 mux41_tb.v 文件上单击右键,在弹出菜单中选择 Simulate (w

    HFUT苍穹战队2020视觉组考核学习计划1

    一、 招收对象 二、 具体视觉组成员应具备的知识/能力 三、 考核流程 四、 学习内容 五、 参考资料

    hfut数据库课件

    课件,适合学生,初学者。初步介绍内容数据库内容

Global site tag (gtag.js) - Google Analytics