省队集训Day3 light
【问题描述】
“若是万一琪露诺(俗称 rhl)进行攻击,什么都好,冷静地回答她的问题来吸引她。
对方表现出兴趣的话,那就慢慢地反问。在她考虑答案的时候,趁机逃吧。就算是很简单的
问题,她一定也答不上来。” ——《上古之魔书》
天空中出现了许多的北极光,这些北极光组成了一个长度为 n 的正整数数列 a[i],远古之
魔书上记载到:2 个位置的 graze 值为两者位置差与数值差的和:
graze(x,y)=|x-y|+|a[x]-a[y]|。
要想破解天罚,就必须支持 2 种操作(k 都是正整数):
Modify x k:将第 x 个数的值修改为 k。
Query x k:询问有几个 i 满足 graze(x,i)<=k。
由于从前的天罚被圣王 lmc 破解了,所以 rhl 改进了她的法术,询问不仅要考虑当前数
列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的 a[x]的 graze 值
<=k 的对数。(某位置多次修改为同样的数值,按多次统计)
【输入格式】
第 1 行两个整数 n,q。分别表示数列长度和操作数。
第 2 行 n 个正整数,代表初始数列。
第 3~q+2 行每行一个操作。
【输出格式】
对于每次询问操作,输出一个非负整数表示答案。
【样例输入】
3 5
2 4 3
Query 2 2
Modify 1 3
Query 2 2
Modify 1 2
Query 1 1
【样例输出】
2
3
3
将每个元素看做一个点(x,A[x]),那么也就是询问一个斜着的正方形内有多少个
点;或者修改一个点的 y 值。
把斜着的正方形转成正着的正方形,也就是(x,y)->(x-y,x+y),然后变为查询矩形
内部元素个数。
然后就是CDQ裸题了··
code:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define maxn 60005
#define maxm 260005
#define maxq 60005
#define lowbit(x) ((x)&(-(x)))
using namespace std;
char s[];
int n,q,x,k,cnt,lim,a[maxn],ans[(maxn+maxq)*];
bool bo[maxn+maxq];
struct DATA{
int num,id,op,x,y,t;
}list[(maxn+maxq)*],p,temp[(maxn+maxq)*];
void add(int op,int id,int x,int y,int k){
int xx=x-y,yy=x+y;
if (!op) lim=max(lim,xx),lim=max(lim,yy),list[++cnt]=(DATA){cnt,id,op,xx,yy,};
else{
int x1=xx-k,y1=yy-k,x2=xx+k,y2=yy+k;
if (y1>) list[++cnt]=(DATA){cnt,id,op,x1-,y1-,};
list[++cnt]=(DATA){cnt,id,op,x1-,y2,-};
if (y1>) list[++cnt]=(DATA){cnt,id,op,x2,y1-,-};
list[++cnt]=(DATA){cnt,id,op,x2,y2,};
lim=max(lim,x2),lim=max(lim,y2);
}
}
struct bit{
int val[maxm];
void insert(int x,int v){for (;x<=lim;x+=lowbit(x)) val[x]+=v;}
int query(int x){
int ans=;
for (;x;x-=lowbit(x)) ans+=val[x];
return ans;
}
}T;
void solve(int l,int r){
if (l==r) return;
int m=(l+r)>>;
solve(l,m),solve(m+,r);
for (int i=l,a=l,b=m+;i<=r;i++){
p=(a<=m&&(b>r||list[a].x<=list[b].x))?list[a++]:list[b++];
if (p.num<=m&&!p.op) T.insert(p.y,);
else if (p.num>m&&p.op) ans[p.id]+=T.query(p.y)*p.t;
temp[i]=p;
}
for (int i=l;i<=r;i++) list[i]=temp[i];
for (int i=l;i<=r;i++) if (list[i].num<=m&&!list[i].op) T.insert(list[i].y,-);
}
int main(){
scanf("%d%d",&n,&q);
for (int i=;i<=n;i++){
scanf("%d",&a[i]);
add(,i,i,a[i],);
}
for (int i=n+;i<=n+q;i++){
scanf("%s%d%d",s,&x,&k);
if (s[]=='M') a[x]=k,add(,i,x,a[x],);
else{
bo[i]=;
add(,i,x,a[x],k);
}
}
n+=q,lim++,solve(,cnt);
for (int i=;i<=n;i++) if (bo[i]) printf("%d\n",ans[i]);
return ;
}
省队集训Day3 light的更多相关文章
- 省队集训Day3 tree
[题目描述] RHL 有一天看到 lmc 在玩一个游戏. “愚蠢的人类哟,what are you doing”,RHL 说. “我在玩一个游戏.现在这里有一个有 n 个结点的有根树,其中有 m 个叶 ...
- bzoj4171 or 省队集训day3 chess: Rhl的游戏
[题目描述] RHL最近迷上一个小游戏:Flip it.游戏的规则很简单,在一个N*M的格子上,有一些格子是黑色,有一些是白色.每选择一个格子按一次,格子以及周围边相邻的格子都会翻转颜色(边相邻指至少 ...
- FJ省队集训DAY3 T2
思路:如果一个DAG要的路径上只要一条边去切掉,那么要怎么求?很容易就想到最小割,但是如果直接做最小割会走出重复的部分,那我们就这样:反向边设为inf,这样最小割的时候就不会割到了,判断无解我们直接用 ...
- FJ省队集训DAY3 T1
思路:我们考虑如果取掉一个部分,那么能影响到最优解的只有离它最近的那两个部分. 因此我们考虑堆维护最小的部分,离散化离散掉区间,然后用线段树维护区间有没有雪,最后用平衡树在线段的左右端点上面维护最小的 ...
- 省队集训 Day3 吴清华
[题目大意] 给网格图,共有$n * n$个关键节点,横向.纵向距离均为$d$,那么网格总长度和宽度均为$(n+1) * d + 1$,最外围一圈除了四角是终止节点.要求每个关键节点都要通过线连向终止 ...
- 省队集训 Day3 陈姚班
[题目大意] 给一张网格图,上往下有流量限制,下往上没有,左往右有流量限制. $n * m \leq 2.5 * 10^6$ [题解] 考场直接上最大流,50分.竟然傻逼没看出狼抓兔子. 平面图转对偶 ...
- 省队集训 Day3 杨北大
[题目大意] 给出平面上$n$个点$(x_i, y_i)$,请选择一个不在这$n$个点之内的点$(X, Y)$,定义$(X, Y)$的价值为往上下左右四个方向射出去直线,经过$n$个点中的数量的最小值 ...
- JS省队集训记
不知不觉省队集训已经结束,离noi也越来越近了呢 论考前实战训练的重要性,让我随便总结一下这几天的考试 Day 1 T1 唉,感觉跟xj测试很像啊?meet in middle,不过这种题不多测是什么 ...
- HN2018省队集训
HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...
随机推荐
- Linux下开启MySQL的远程连接
今天在用客户端工具远程连接mysql的时候,连接不上,以为是防火墙,关了防火墙后依然打不开,后开在网上查了下原来mysql基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root ...
- docker 镜像中包含数据库环境和运行环境
需求: 一个镜像中要包含数据库环境和运行环境 Apache 环境 + mariadb 已经在拉取了Apache的运行环境 - 拉取代码 git https://github.com/timhaak/d ...
- gitlab hooks
之前一直用文件同步工具进行两台服务器之间的同步 最初的目的是吧gitlab的代码库同步到开发环境中运行 实时的 ,后来由于gitlab的代码仓库的代码不是实时的 于是在即使同步不适合 我的需求. 后来 ...
- Linux多线程——使用互斥量同步线程
前文再续,书接上一回,在上一篇文章: Linux多线程——使用信号量同步线程中,我们留下了一个如何使用互斥量来进行线程同步的问题,本文将会给出互斥量的详细解说,并用一个互斥量解决上一篇文章中,要使用两 ...
- [RxJS] Combination operator: withLatestFrom
Operator combineLatest is not the only AND-style combinator. In this lesson we will explore withLate ...
- 计算机体系结构-CPU
NUMA
- FastDFS配置说明(中英文)
FastDFS配置说明 1)tracker.conf # is this config file disabled # false for enabled # true for disabled di ...
- java取得整数部分 代码
Pattern p1 = Pattern.compile("[0-9]*"); Matcher m1 = p1.matcher("100.0"); boolea ...
- Java基础知识强化之集合框架笔记16:List集合的特有功能概述和测试
1. List集合的特有功能概述: (1)添加功能: void add(int index, Object element):在指定位置添加元素 (2)获取功能: Object get(int ind ...
- 使用SqlAlchemy时如何方便的取得dict数据、dumps成Json
使用Sqlalchemy可以方便的从数据库读取出python对象形式的数据(吐槽:说实话对象形式也没多方便,还不如我之前从关系型数据库直接读取出dict形式的数据用起来方便,具体参见我以前的文章htt ...