摘要:
单点更新 区间查询 敌兵布阵 坑点:cin cout 一直超时 改成 scanf 和printf 就过了 /*输入 t样例 N(N<=50000) 第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。 接下来每行有一条命令,命令有4种形式: (1) Add i j,i和j为正 阅读全文
摘要:
逆序对的定义: 在一个数列aa中,满足a[i]>a[j]a[i]>a[j]并且i<ji<j的数对就叫做逆序对。 解法: 一般有两种解法:归并排序和树状数组。 归并排序动图: 归并求逆序对: 归并排序用到了二分的思想,在排序过程中如果a[i]<=a[j] 就不会产生逆序对,如果a[i]>a[j]就会产 阅读全文
摘要:
主席树是 以前缀和形式基于权值线段树建立的可持久化线段树,可持久化指的是它保存了这棵树的所有历史版本. 最简单的办法是:如果你输入了n个数,那么每输入一个数字a[i],就构造一棵保存了从a[1]到a[i]的权值线段树,由于只增加了logn的节点数,我们增加改变的节点并将没有改变的子树指向该节点,这样 阅读全文
摘要:
定义: 权值线段树,基于普通线段树,但是不同。 举个栗子:对于一个给定的数组,普通线段树可以维护某个子数组中数的和,而权值线段树可以维护某个区间内数组元素出现的次数。 在实现上,由于值域范围通常较大,权值线段树会采用离散化或动态开点的策略优化空间。单次操作时间复杂度o(logn) 权值线段树的节点用 阅读全文
摘要:
今天,在网上看见有网友在问什么是离线操作,什么是在线操作。 离线操作:读入所有的操作数据,然后一次性处理。 在线操作:每读入一个操作数据,就进行一次操作。 值得注意的是两者并不等价,有的时候,离线操作要比在线操作要快。 但是,离线操作的缺点也非常明显。那就是要占用一些额外的空间。 线段树可以动态开点 阅读全文