[COGS2554][SYZOJ247][福利]可持久化线段树
思路:
主席树模板。
注意内存的分配,原始的线段树有$2n$个结点,每次更新时最多增加$log(n)$个结点,总共有$q$次询问,所以存储结点的数组大小为$2N+q log(n)$。
#include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
inline int getint() {
char ch;
while(!isdigit(ch=getchar()));
int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=,Q=,logN=;
class FotileTree {
private:
unsigned int left[(N<<)+Q*logN],right[(N<<)+Q*logN];
std::vector<int> val;
void push_up(const int p) {
val[p]=std::max(val[left[p]],val[right[p]]);
}
public:
unsigned int root[Q];
unsigned int newnode() {
val.push_back();
return val.size()-;
}
void build(const int p,const int b,const int e) {
if(b==e) {
val[p]=getint();
return;
}
int mid=(b+e)>>;
build(left[p]=newnode(),b,mid);
build(right[p]=newnode(),mid+,e);
push_up(p);
}
unsigned int modify(const int p,const int b,const int e,const int x,const int y) {
unsigned int new_p=newnode();
if(b==e) {
val[new_p]=y;
return new_p;
}
int mid=(b+e)>>;
if(x<=mid) left[new_p]=modify(left[p],b,mid,x,y),right[new_p]=right[p];
if(x>mid) right[new_p]=modify(right[p],mid+,e,x,y),left[new_p]=left[p];
push_up(new_p);
return new_p;
}
int query(const int p,const int b,const int e,const int l,const int r) {
if((b==l)&&(e==r)) return val[p];
int mid=(b+e)>>;
int ans=;
if(l<=mid) ans=std::max(ans,query(left[p],b,mid,l,std::min(mid,r)));
if(r>mid) ans=std::max(ans,query(right[p],mid+,e,std::max(mid+,l),r));
return ans;
}
};
FotileTree t;
int main() {
freopen("longterm_segtree.in","r+",stdin);
freopen("longterm_segtree.out","w+",stdout);
int n=getint(),q=getint(),ver=;
t.build(t.root[++ver]=t.newnode(),,n);
while(q--) {
int op=getint(),k=getint(),x=getint(),y=getint();
if(!op) printf("%d\n",t.query(t.root[k],,n,x,y));
if(op) t.root[++ver]=t.modify(t.root[k],,n,x,y);
}
fclose(stdin),fclose(stdout);
return ;
}
[COGS2554][SYZOJ247][福利]可持久化线段树的更多相关文章
- cogs2554 [福利]可持久化线段树
cogs2554 [福利]可持久化线段树 原题链接 每次修改复制一遍就行了... 1A!!! // It is made by XZZ #include<cstdio> #include& ...
- cogs 2554. [福利]可持久化线段树
题目链接 cogs 2554. [福利]可持久化线段树 题解 没有 代码 #include<cstdio> #include<cstring> #include<algo ...
- AC日记——[福利]可持久化线段树 cogs 2554
2554. [福利]可持久化线段树 ★★☆ 输入文件:longterm_segtree.in 输出文件:longterm_segtree.out 简单对比时间限制:3 s 内存限制:2 ...
- YSZOJ:#247. [福利]可持久化线段树 (最适合可持久化线段树入门)
题目链接:https://syzoj.com/problem/247 解题心得: 可持久化线段树其实就是一个线段树功能的加强版,加强在哪里呢?那就是如果一颗普通的线段树多次修改之后还能知道最开始的线段 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- 【BZOJ-2653】middle 可持久化线段树 + 二分
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1298 Solved: 734[Submit][Status][Discu ...
- HDU 4866 Shooting(持久化线段树)
view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include & ...
- 【BZOJ-3653】谈笑风生 DFS序 + 可持久化线段树
3653: 谈笑风生 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 628 Solved: 245[Submit][Status][Discuss] ...
随机推荐
- 出现“error LNK1169: 找到一个或多个多重定义的符号”的原因
或许,有人真的会这样写程序吧...所以才会碰到如下哥们提出的问题. https://zhidao.baidu.com/question/131426210.html 出现这种问题的原因链接中的最佳答案 ...
- 002_HTTP每日分析及翻译
一.Request Headers Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng ...
- Android通讯:短信
Android通讯之短信功能实现: 使用android.telephony.SmsManager对象,可以发送短信和彩信.// 构造回调函数,短信发送结束后,会发出对应的Intent请求Intent ...
- jmeter之beanshell取出需要参数,传递给下个请求
jmeter之beanshell取出需要参数,传递给下个请求 事件背景: 上周同事用jmeter录制脚本,录制成功回放后,并没有达到自己想要的结果. ps:他想从数据库取出某个字段值,然后对数据库做操 ...
- 通过使用CSS字体阴影效果解决hover图片时显示文字看不清的问题
1.前言 最近需要加入一个小功能,在鼠标越过图片时,提示其大小和分辨率,而不想用增加属性title来提醒,不够好看.然而发现如果文字是一种颜色,然后总有概率碰到那张图上浮一层的文字会看不到,所以加入文 ...
- EntityFramework codefirst Enable-Migrations No context type was found in the assembly “MyApp.Web” error
Enable-Migrations -Force -ContextTypeName "MyApp.Repository.DataContext" -ProjectName &quo ...
- viewpager显示图片的Adapter
package com.ming.chiye.yishanghorse.Adapter; import android.content.Context; import android.graphics ...
- C++ code:数值计算之辛普生(Simpson)法求解积分问题
- php中常用的正则表达式函数
php中常用的正则表达式函数 * preg_match() * preg_match_all() * preg_replace() * preg_filter() * preg_grep() * pr ...
- JavaScript常见的假值
值 说明 var a=false; 值等于false(假) var a =0; 值等于0 var a=''; 空的字符串 var a=10/'abc' NaN var a; 未赋值变量