树状数组
whoammiiiiii
这个作者很懒,什么都没留下…
展开
-
poj 2155(二维树状数组维护前缀和 求某个点被多少个矩形覆盖过)
思路:要知道树状数组的本质是nlogn修改前缀和以及nlogn求出前缀和。而这道题某个点的前缀和就是这个点被修改的次数。没了。#include <stdio.h>#include <vector>#include <algorithm>#include <string.h>#include <limits.h>#include <string>#include <iostream>#include &l原创 2020-08-21 04:22:14 · 217 阅读 · 0 评论 -
hdu 1892 See you~(树状数组求二维前缀和)
题意:有一个二维的方格阵,每个方格有一本书,现在最其中一个矩形区间进行增删询问操作,输出对于结果。思路:树状数组求二维前缀和基础题。注意他输入的x1,y1有可能是0,所以++x1,++y1。还有一点,因为lowbit(x)表示x所管理的区域,又因为这道题里每个格子里最开始有一本书,所以初始化时可以直接把二维数组a[i][j] = lowbit(i) * lowbit(j)l。复杂度由n^2logn进化为n^2。#include <bits/stdc++.h>#define lowb原创 2020-08-20 23:06:23 · 173 阅读 · 0 评论 -
hdu 3743 && hdu 4911(树状数组求逆序对的应用)
经典问题:两两交换得到递增,问最少交换次数3743题意:现在有n个数,每个数distinct,现在只能交换两两相邻的数,现在问你至少要交换多少次才能让这n个数是单调递增的。思路:可以想到这个交换的过程类似于冒泡排序,可以证明冒泡这样拍所需的交换次数是最少的(虽然我不会证)所以每个数要交换多少次,就看前面有多少比他大的数,最后也就是求总的逆序对个数。4911题意:意思基本跟3743一样,多了几个条件,现在只可以做k步两两交换操作,现在问你能获得最少逆序对的个数。思路:max(0原创 2020-08-19 23:05:34 · 112 阅读 · 0 评论 -
hdu 3333 (主席树在线求区间不同数的个数 or 线段树或者树状数组离线询问处理 )
题目链接时限 :3000ms题意:给你n个数,下面有m个询问,每次询问区间【l,r】之间不同数的和是多少。思路:1.主席树 500ms。和spoj DQUERY那道题求区间不同数的个数差不多,区别就是spoj那道题1到n每个点都要更新主席树那条链是+1-1的操作,这个是对那条链+num-num的操作。/*** Author : zzy* Date : 2020-04-06-15....原创 2020-04-07 03:34:52 · 206 阅读 · 0 评论