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 



1 2 3 4 5 6 



2 1 6 

1 2 3 

2 2 3 

2 3 4 

Sample Output 





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的礼物线段树的更多相关文章

  1. Ocean的礼物(线段树单点修改)

    题目链接:http://oj.ismdeep.com/contest/Problem?id=1284&pid=0 A: Ocean的礼物 Time Limit: 5 s      Memory ...

  2. [计蒜客T2238]礼物_线段树_归并排序_概率期望

    礼物 题目大意: 数据范围: 题解: 这题有意思啊($md$卡常 直接做怎么做? 随便上个什么东西,维护一下矩阵乘和插入,比如说常数还算小的$KD-Tree$(反正我是没见人过过 我们漏掉了一个条件, ...

  3. 【BZOJ-4556】字符串 后缀数组+二分+主席树 / 后缀自动机+线段树合并+二分

    4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 657  Solved: 274[Su ...

  4. [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 ...

  5. 字符串(tjoi2016,heoi2016,bzoj4556)(sam(后缀自动机)+线段树合并+倍增+二分答案)

    佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为\(n\)的字符串\(s\),和\(m\)个问题.佳媛姐姐必须正确回答这\(m\)个问题, ...

  6. BZOJ4556 Tjoi2016&Heoi2016 字符串【后缀自动机+倍增+线段树合并】

    Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开 ...

  7. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  8. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  9. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

随机推荐

  1. flask 连接数据库

    FLASK 连接mysql 数据库 1 # -*- encoding: utf-8 -*- 2 3 from flask import Flask 4 #导入第三方连接库 5 from flask_s ...

  2. sqlserver开窗函数在财务对账中的用法

    曾几何时发现开窗函数在财务对账总特别好用.但是每次可能很久没用,逻辑都要重头来过.特此留一份完整的思考逻辑待日后参考. 以下是数据源: 从上面的数据可以看到通过C列,那么只需要两个条件即可获得已经用对 ...

  3. 使用@RequestBody将请求体映射到Action方法参数中

    @PostMapping("/user") public User create(@RequestBody User user){ System.out.println(user. ...

  4. canner CMS 系统 (公司在台湾) https://www.canner.io/

    canner  CMS 系统 (公司在台湾) https://www.canner.io/ https://github.com/Canner/canner 一种创新的CMS构建方式,采用 Nodej ...

  5. aiojobs

    import asyncio import aiojobs async def coro(timeout): print(timeout) await asyncio.sleep(timeout) p ...

  6. VUE环境部署

     npm install vue-router --save 下载node.js安装https://nodejs.org/en/ npm install -g cnpm --registry=http ...

  7. webpack配置的基本介绍

    https://github.com/DDFE/DDFE-blog/issues/10 全局安装 webpack :(当前笔记版本: webpack  3.10.0 , mac环境) 1. npm i ...

  8. 快速安装freeswitch

    前不久在Centos 6.4上安装了一台Freeswitch,测试已经OK.为了测试FS 的集群效果,从新在安装一台FS,快速安装的过程如下: 方案一:快速安装前提:不用重新下载Freeswitch. ...

  9. Ex 7_17 考虑如下的网络(其中数字为对应边的容量)...第十三次作业

    (a) 利用ford-fulkerson算法即可求出最大流和最小分割. (b) 剩余网络为 由S可达的顶点为A.B.可达T的顶点为C. (c) 瓶颈边有e(A,C),e(B,C). (d) 下图中不包 ...

  10. es2015箭头函数的this

    摘自https://www.cnblogs.com/chenxygx/p/6509564.html,谢谢博主的分享!