SPOJ GSS2 Can you answer these queries II (线段树离线) - xgtao -

Can you answer these queries II

 

这是一道线段树的题目,维护历史版本,给出N(<=100000)个数字(-100000<=x<=100000),要求求出在[l,r]区间里面的连续序列的最大值,并且重复的数字可以加入序列但是值不能再计算。

 

本题明显使用线段树,它只存在询问而没有修改操作,离线相对于在线更好维护。

定义s[i] = ai + ai+1 + ai+2 + ... an,以ai开头的数列的和,那么每次加入更新ai 那么s1,s2,...si都会相应的加一个ai,s[1~i]中出现过a[i]是不能重复加值的,那么为了避免重复加值,用pre[a[i]]表示a[i]上一次出现的位置,那么也就是s[pre[ai]+1]~s[i]这一个区间加上a[i],每一次更新a[i]都要记录历史版本的最大值和懒惰标记的最大值。

 

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 100010;
const int M = 100010;
const int C = 100001;
long long res[N];
int a[N],pre[N<<1],n,m;struct Que{int l,r,ID;bool operator < (const Que &rhs)const{return r < rhs.r;}
}question[M];struct Tree{long long s,ms,d,md;}tree[N<<2];#define lson k<<1,l,mid
#define rson k<<1|1,mid+1,rvoid processup(int k){tree[k].s = max(tree[k<<1].s,tree[k<<1|1].s);tree[k].ms = max(tree[k<<1].ms,tree[k<<1|1].ms);
}void processdown(int k){if(!tree[k].d && !tree[k].md)return;tree[k<<1].ms = max(tree[k<<1].ms,tree[k<<1].s+tree[k].md);tree[k<<1].md = max(tree[k<<1].md,tree[k<<1].d+tree[k].md);tree[k<<1].s += tree[k].d,tree[k<<1].d += tree[k].d;tree[k<<1|1].ms = max(tree[k<<1|1].ms,tree[k<<1|1].s+tree[k].md);tree[k<<1|1].md = max(tree[k<<1|1].md,tree[k<<1|1].d+tree[k].md);tree[k<<1|1].s += tree[k].d,tree[k<<1|1].d += tree[k].d;tree[k].d = tree[k].md = 0;
}long long query(int k,int l,int r,int xl,int xr){if(l == xl && r == xr)return tree[k].ms;processdown(k);int mid = (l+r)>>1;if(xr <= mid)return query(lson,xl,xr);else if(xl > mid)return query(rson,xl,xr);else return max(query(lson,xl,mid),query(rson,mid+1,xr));processup(k);
}void update(int k,int l,int r,int xl,int xr,long long x){if(l == xl && r == xr){tree[k].s += x;tree[k].d += x;tree[k].ms = max(tree[k].ms,tree[k].s);tree[k].md = max(tree[k].md,tree[k].d);return;}processdown(k);int mid = (l+r)>>1;if(xr <= mid)update(lson,xl,xr,x);else if(xl > mid)update(rson,xl,xr,x);else update(lson,xl,mid,x),update(rson,mid+1,xr,x);processup(k);
}#define clr(a,b) memset(a,b,sizeof(a))int main(){while(scanf("%d",&n) == 1){clr(tree,0),clr(pre,0);for(int i = 1;i <= n;++i)scanf("%d",&a[i]);scanf("%d",&m);for(int i = 1;i <= m;++i){scanf("%d%d",&question[i].l,&question[i].r);question[i].ID = i;}sort(question+1,question+m+1);int ID = 1;for(int i = 1;i <= n;++i){update(1,1,n,pre[a[i]+C]+1,i,a[i]);pre[a[i]+C] = i;while(ID <= m && question[ID].r == i){res[question[ID].ID] = query(1,1,n,question[ID].l,question[ID].r);ID++;}}for(int i = 1;i <= m;++i)printf("%lld\n",res[i]);}return 0;
}

  

  

转载于:https://www.cnblogs.com/xgtao984/p/5721033.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node使用MySQL

一、认识mysql2 如何可以在Node的代码中执行SQL语句来&#xff0c;这里我们可以借助于两个库&#xff1a; mysql&#xff1a;最早的Node连接MySQL的数据库驱动&#xff1b;mysql2&#xff1a;在mysql的基础之上&#xff0c;进行了很多的优化、改进&#xff1b;目前相对来说&a…

java安装后在哪里打开_冷却塔声屏障安装后降噪效果不理想,原因出在哪里?...

现有冷却塔大部分产品都不能满足噪音环保标准&#xff0c;只有少数几种低吨位超低噪声型号的冷却塔可以满足少部分区域噪声标准要求。在一些商住混合区&#xff0c;冷却塔的出风口强烈的噪声和热气往往干扰附近居民不得安宁&#xff0c;所以冷却塔的噪声问题成为环境投诉的热点…

iOS10 权限崩溃问题

iOS10 权限崩溃问题 原文: http://blog.csdn.net/runleelrg/article/details/51673025 今天 手机升级了 iOS10 Beta&#xff0c;然后用正在开发的项目 装了个ipa包&#xff0c;发现点击有关 权限访问 直接Crash了&#xff0c;并在控制台输出了一些信息&#xff1a; This app h…

Koa框架——coderhub实战

https://github.com/zep03/koa-coderhub/commits/main 一、coderhub功能接口说明 Coderhub旨在创建一个程序员分享生活动态的平台。 完整的项目接口包括&#xff1a; 面向用户的业务接口&#xff1b;面向企业或者内部的后台管理接口&#xff1b; 完成的功能如下&#xff1a;…

python 协程_Python多任务协程

协程协程&#xff0c;又称微线程&#xff0c;纤程。英文名Coroutine。协程是python个中另外一种实现多任务的方式&#xff0c;只不过比线程更小占用更小执行单元(理解为需要的资源)。为啥说它是一个执行单元&#xff0c;因为它自带CPU上下文。这样只要在合适的时机&#xff0c;…

python局域网大文件_[源码]Python简易http服务器(内网渗透大文件传输含下载命令)...

Python简易http服务器源码import SimpleHTTPServerimport SocketServerimport sysPORT 80if len(sys.argv) ! 2:print("use: web.exe port")else:PORT int(sys.argv[1])Handler SimpleHTTPServer.SimpleHTTPRequestHandlerhttpd SocketServer.TCPServer(("&…

CoderHub接口文档

CoderHub接口文档 Coderhub旨在创建一个程序员分享生活动态的平台。 完成的功能如下&#xff1a; 用户管理系统 内容管理系统 内容评论管理 内容标签管理 文件管理系统 接口完整请求示例&#xff1a;http://127.0.0.1:8000/users github仓库&#xff1a;https://github.com…

Spring 概况

网站&#xff1a;http://spring.io/ http://projects.spring.io/spring-framework Spring是一个开源框架&#xff0c;为了解决企业应用开发的复杂性而创建的&#xff0c;但现在已经不止应用于企业应用。 是一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff…

属于python应用领域的有数据可视化_Python数据可视化

译者序前 言第1章 数据可视化概念框架11.1 数据、信息、知识和观点21.1.1 数据21.1.2 信息21.1.3 知识31.1.4 数据分析和观点31.2 数据转换41.2.1 数据转换为信息41.2.2 信息转换为知识71.2.3 知识转换为观点71.3 数据可视化历史81.4 可视化如何帮助决策101.4.1 …

JavaScript高级之构造函数和原型

1.1 概述 在典型的 OOP 的语言中&#xff08;如 Java&#xff09;&#xff0c;都存在类的概念&#xff0c;类就是对象的模板&#xff0c;对象就是类的实例&#xff0c;但在 ES6之前&#xff0c; JS 中并没用引入类的概念。 ES6&#xff0c; 全称 ECMAScript 6.0 &#xff0c;2…

wget python3_python wget

wget -nH &#xff0d;K -E -d -np -L -r http://flatfull.com/themes/scale/-np 递归下载时不搜索上层目录-nH, –no-host-directories 不创建主机目录-d, –debug 打印调试输出-L 递归时不进入其它主机-E //将所有text/html文档以.html扩展名保存-r 递归抓取-k 抓取之后修正链…

JavaScript高级之继承

ES6之前并没有给我们提供 extends 继承。我们可以通过构造函数原型对象模拟实现继承&#xff0c;被称为组合继承。 2.1 call() 调用这个函数, 并且修改函数运行时的 this 指向 fun.call(thisArg, arg1, arg2, …) thisArg &#xff1a;当前调用函数 this 的指向对象arg1&…

【代码笔记】iOS-UILable电子表显示

一&#xff0c;效果图。 二&#xff0c;代码。 RootViewController.h #import <UIKit/UIKit.h>interface RootViewController : UIViewController {UILabel *label;NSDateFormatter *dateFormatter ; } end RootViewController.m #import "RootViewController.h&qu…

python cpu_python 让cpu满载

python 让cpu满载发布时间&#xff1a;2018-07-29 17:25:11编辑&#xff1a;admin阅读(5939)搞zabbix监控的时候&#xff0c;linux服务器的负载很低&#xff0c;如何写一个python脚本&#xff0c;让它满载呢&#xff1f;网上搜了一堆&#xff0c;发现各种不靠谱。后来终于发现了…

JavaScript高级之ES5 中的新增方法

3.1 ES5 新增方法概述 ES5 中给我们新增了一些方法&#xff0c;可以很方便的操作数组或者字符串&#xff0c;这些方法主要包括&#xff1a; 数组方法字符串方法对象方法 3.2 数组方法 迭代(遍历)方法&#xff1a;forEach()、map()、filter()、some()、every()&#xff1b; …

extjs 事件

。。转载于:https://www.cnblogs.com/glblog/p/5732636.html

python定位二维码_图像中二维码的检测和定位

二维码二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的&#xff1b;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念&#xff0c;使用若干个与二进制相对应的几何…

JavaScript高级之函数进阶

1. 函数的定义和调用 1.1 函数的定义方式 函数声明方式 function 关键字 (命名函数)函数表达式 (匿名函数)new Function() Function 里面参数都必须是字符串格式第三种方式执行效率低&#xff0c;也不方便书写&#xff0c;因此较少使用所有函数都是 Function 的实例(对象)…

kafka Failed to send messages after 3 tries 问题解决

kafka Failed to send messages after 3 tries. 在kafka0.8开发过程中 生产者测试用例碰到了 Exception in thread "main" kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.at kafka.producer.async.DefaultEventHandler.handle(…

react 前端解析二进制流_一年半前端跳槽面试经验(头条、微信、shopee)

在2019年末的时候&#xff0c;突然想搞点大事&#xff0c;思来想去&#xff0c;感觉只有跳槽是最刺激的。由于我比较懒&#xff0c;不想换城市&#xff0c;所以这次只面试了头条、微信和 shopee。十分幸运&#xff0c;都拿到了 offer。接下来就简单的说下大家关心的面试题吧。问…