A.Ocean的礼物线段树
A: Ocean的礼物
Time Limit: 2 s Memory Limit: 128 MB
Submit My Status
Problem Description
皇家理工存在一段很神奇的路段,这段路由nn个格子组成,每个格子都有一个数字,你可以走这段路的任意一段。这段路的神奇之处就在于,如果你所处的这个格子数字和你经过的前一个格子数字不相同的话,你就可以获得一个礼物(初始一定可以获得礼物)。现在Ocean想知道,给定任意路段的左边界和右边界,问若走这段路可以获得多少礼物。不过幸运的是,Ocean很快就解决了,并且获得了大量的礼物。玩的十分开心。但是有一天,这段路神奇的发生了改变。它不但会给你礼物。它还可能随时的改变其任意某处的格子上的数字。这下Ocean可就犯愁了,他想知道任意一段路可以获得的礼物是多少。聪明的你可以帮下他吗?
Input
第一行输入一个整数nn,代表格子数。(1≤n≤106)(1≤n≤106)
第二行输入nn个整数xx。(1≤x≤108)(1≤x≤108)
第三行输入一个整数mm,代表mm次操作。(1≤m≤2∗105)(1≤m≤2∗105)
接下来第四行到3+m3+m行每行33个数op,x,yop,x,y。
若op=1op=1则把xx处的数修改为yy。(1≤x≤n,1≤y≤108)(1≤x≤n,1≤y≤108)
若op=2op=2,询问区间[x,y][x,y]内可以获得的礼物数。(1≤x≤y≤n)(1≤x≤y≤n)
Output
对于每个询问输出一个整数,代表可以获得的礼物数
Sample Input
6
1 2 3 4 5 6
4
2 1 6
1 2 3
2 2 3
2 3 4
Sample Output
6
1
2
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int cnt,a[1111111];
struct node
{
int l,r,val;
}p[2222222];
void pushup(int i)
{
p[i].val=p[i<<1].val+p[i<<1|1].val;
}
void build(int i,int x,int y)
{
p[i].l=x;
p[i].r=y;
if(p[i].r==p[i].l)
{
int pos=p[i].l;
if(a[pos]!=a[pos-1]||pos==1)
p[i].val=1;
else p[i].val=0;
return;
}
int m=p[i].r+p[i].l>>1;
build(i<<1,x,m);
build(i<<1|1,m+1,y);
pushup(i);
}
void update(int i,int x,int val)
{
if(p[i].l==p[i].r)
{
p[i].val=val;
return;
}
int m=p[i].r+p[i].l>>1;
if(x<=m)
update(i<<1,x,val);
if(x>m)
update(i<<1|1,x,val);
pushup(i);
}
void query(int i,int x,int y)
{
if(p[i].l>=x&&p[i].r<=y)
{
cnt+=p[i].val;
return;
}
int m=p[i].l+p[i].r>>1;
if(x<=m)
query(i<<1,x,y);
if(y>m)
query(i<<1|1,x,y);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
int Q;
scanf("%d",&Q);
while(Q--)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(x==1)
{
a[y]=z;
if(y>1)
{
if(a[y]==a[y-1])
update(1,y,0);
else
update(1,y,1);
}
if(y<n)
{
if(a[y]==a[y+1])
update(1,y+1,0);
else
update(1,y+1,1);
}
}
if(x==2)
{
cnt=1;
query(1,y+1,z);
printf("%d\n",cnt);
}
}
return 0;
}
A.Ocean的礼物线段树的更多相关文章
- Ocean的礼物(线段树单点修改)
题目链接:http://oj.ismdeep.com/contest/Problem?id=1284&pid=0 A: Ocean的礼物 Time Limit: 5 s Memory ...
- [计蒜客T2238]礼物_线段树_归并排序_概率期望
礼物 题目大意: 数据范围: 题解: 这题有意思啊($md$卡常 直接做怎么做? 随便上个什么东西,维护一下矩阵乘和插入,比如说常数还算小的$KD-Tree$(反正我是没见人过过 我们漏掉了一个条件, ...
- 【BZOJ-4556】字符串 后缀数组+二分+主席树 / 后缀自动机+线段树合并+二分
4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 657 Solved: 274[Su ...
- [BZOJ5139][Usaco2017 Dec]Greedy Gift Takers 权值线段树
Description Farmer John's nemesis, Farmer Nhoj, has NN cows (1≤N≤10^5), conveniently numbered 1…N. T ...
- 字符串(tjoi2016,heoi2016,bzoj4556)(sam(后缀自动机)+线段树合并+倍增+二分答案)
佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为\(n\)的字符串\(s\),和\(m\)个问题.佳媛姐姐必须正确回答这\(m\)个问题, ...
- BZOJ4556 Tjoi2016&Heoi2016 字符串【后缀自动机+倍增+线段树合并】
Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开 ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
随机推荐
- python,关于这个里边的私有方法(private)、保护方法(protected)、公开方法(public)
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的. _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行 ...
- python第七天,dict
在python里边创建字典的方法有如下几种: >>> dict1= dict(((),(),(),(),())) >>> print(dict1) {, , , , ...
- python 实现神经网络算法
注: Scratch是一款由麻省理工学院(MIT) 设计开发的一款面向少年的简易编程工具.这里写链接内容 本文翻译自“IMPLEMENTING A NEURAL NETWORK FRO ...
- MII与RMII接口的区别【转】
转自:https://blog.csdn.net/fun_tion/article/details/70270632 1.概述 MII即“媒体独立接口”,也叫“独立于介质的接口”.它是IEEE-802 ...
- 前端清除缓存方法(微信缓存引起的bug)
bug1:在新版微信中,部门安卓机子(华为)出现window.location.href/window.location.reload....等方法来刷新本页面链接,发现页面没有被刷新,经过排查,发现 ...
- liunx之Centos6.8杀毒软件的安装
作者:邓聪聪 为了防止服务器中病毒,安装了类似与Windowns的杀毒软件Clanav,过程如下 首先下载clamav的软件包,官方下载地址为http://www.clamav.net/downloa ...
- linux下添加删除,修改,查看用户和用户组
一.组操作 1.创建组: groupadd test #增加一个test组 2.修改组 groupmod -n test2 test #将test组的名子改成test2 3.删除组 groupdel ...
- svn服务器镜像备份
server master 192.168.0.100-->源版本库 server slave 192.168.0.101-->镜像版本库 1.初始化svnsync init s ...
- 日期控件datepicker的使用
引入JS: <script type="text/javascript" src="static/my/js/bootstrap-datepicker.min.js ...
- jquery获取浏览器URL参数
getRequestParams:function(param){ var reg = new RegExp("(^|&)" + param + "=([^&am ...