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] .根 ...
随机推荐
- flask 连接数据库
FLASK 连接mysql 数据库 1 # -*- encoding: utf-8 -*- 2 3 from flask import Flask 4 #导入第三方连接库 5 from flask_s ...
- sqlserver开窗函数在财务对账中的用法
曾几何时发现开窗函数在财务对账总特别好用.但是每次可能很久没用,逻辑都要重头来过.特此留一份完整的思考逻辑待日后参考. 以下是数据源: 从上面的数据可以看到通过C列,那么只需要两个条件即可获得已经用对 ...
- 使用@RequestBody将请求体映射到Action方法参数中
@PostMapping("/user") public User create(@RequestBody User user){ System.out.println(user. ...
- canner CMS 系统 (公司在台湾) https://www.canner.io/
canner CMS 系统 (公司在台湾) https://www.canner.io/ https://github.com/Canner/canner 一种创新的CMS构建方式,采用 Nodej ...
- aiojobs
import asyncio import aiojobs async def coro(timeout): print(timeout) await asyncio.sleep(timeout) p ...
- VUE环境部署
npm install vue-router --save 下载node.js安装https://nodejs.org/en/ npm install -g cnpm --registry=http ...
- webpack配置的基本介绍
https://github.com/DDFE/DDFE-blog/issues/10 全局安装 webpack :(当前笔记版本: webpack 3.10.0 , mac环境) 1. npm i ...
- 快速安装freeswitch
前不久在Centos 6.4上安装了一台Freeswitch,测试已经OK.为了测试FS 的集群效果,从新在安装一台FS,快速安装的过程如下: 方案一:快速安装前提:不用重新下载Freeswitch. ...
- Ex 7_17 考虑如下的网络(其中数字为对应边的容量)...第十三次作业
(a) 利用ford-fulkerson算法即可求出最大流和最小分割. (b) 剩余网络为 由S可达的顶点为A.B.可达T的顶点为C. (c) 瓶颈边有e(A,C),e(B,C). (d) 下图中不包 ...
- es2015箭头函数的this
摘自https://www.cnblogs.com/chenxygx/p/6509564.html,谢谢博主的分享!