1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MB Submit: 914 Solved: 431 [Submit][Status][Discuss] Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为了体现自己对主的真诚,他们希望自己的墓地拥有着较高的虔诚度…
1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 895  Solved: 422[Submit][Status][Discuss] Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为了体现自己对主的真诚,他们希望自己的墓地拥有着较高的虔诚度…
https://www.luogu.org/problemnew/show/P2154 题意 在一个坐标系中,有w(1e5)个点,这个图中空点的权值是正上,正下,正左,正右各取k个的排列组合情况.计算整个图的空点权值和 思路 由于每个点的坐标是1e9级别的,所以需要先离散化.我们考虑w个点,先按x轴排序,按y轴次排序.从左到右枚举这w个点,对于一个点的x值的影响,我们把它加到树状数组中做前缀和,对于y值的影响,我们直接通过i和i+1两个点的y值计算答案. #include <algorithm>…
传送门 Solution 显然每个点的权值可以由当前点上下左右的树的数量用组合数\(O(1)\)求出,但这样枚举会T 那么我们考虑一段连续区间,对于一行中两个常青树中间的部分左右树的数量一定,我们可用树状数组求区上下贡献值和,相乘就得到了当前区间的贡献. 有思路调不出来系列 Code #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <io…
Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2189    Accepted Submission(s): 634 Problem Description When the magic ball game turns up, Kimi immediately falls in it. The int…
BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然,他能为长者所续的时间,为这三个维度上能量的乘积, 但目前的宇宙很不乐观,胡乱偷取可能造成维度的崩溃, 所以,他必须按逆序偷取这些维度,且在偷取中, 每次偷取的维度的能量必须严格小于他上次偷取的能量, 由于膜法师生活在多元宇宙,所以他可以让所有可能的偷取方案全部发生 题目描述 但他数学不好,所以找到…
题目链接:POJ 2299 Ultra-QuickSort Description In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascend…
题目中矩形的尺寸太大,导致墓地的数目太多,如果我们统计每一个墓地的虔诚度,超时是一定的. 而常青树的数目<=1e5.这启发我们从树的方向去思考. 考虑一行没有树的情况,显然这一行的墓地的虔诚度之和为0.也就是说我们可需要考虑常青树在的行就行了. 对于在同一行的每两颗长青树之间,墓地的虔诚度之和为C(l,k)*C(r,k)*sigma(C(up,k)*C(under,k)).这里的l是左边的这棵树的左边有多少颗树,r同理.up则是这一段的每个墓地上面有多少颗树,under同理.对于求和,我们可以用…
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6321  Solved: 2628[Submit][Status][Discuss] Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i…
题面:P3605 [USACO17JAN]Promotion Counting晋升者计数 题解:这是一道万能题,树状数组 || 主席树 || 线段树合并 || 莫队套分块 || 线段树 都可以写..记得离散化 线段树合并版: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; ; ,edge_head[maxn],W[ma…
Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为了体现自己对主的真诚,他们希望自己的墓地拥有着较高的虔诚度.一块墓地的虔诚度是指以这块墓地为中心的十字架的数目.一个十字架可以看成中间是墓地,墓地的正上.正下.正左.正右都有恰好k 棵常青树.小W 希望知道他所管理的这片公墓中所有墓地的虔诚度总和是多少 Input 第一行包含两个用…
题目链接 BZOJ 洛谷 区间第k小,我们可以想到主席树.然而这是静态的,怎么支持修改? 静态的主席树是利用前缀和+差分来求解的,那么对于每个位置上的每棵树看做一个点,拿树状数组更新. 还是树状数组的过程,区间加时,每到一个位置在这棵主席树中插入这个数. 查询时,将所有询问要访问到的主席树存下来,delta为所有存下的树的和的差值:改变节点时所有的主席树访问节点都变. 每次树状数组会访问logn棵树,每棵树改变logn个点.时间空间复杂度都为 \(O(nlog^2n)\). 线段树套平衡树见这.…
给出一个序列 相邻的两个数可以进行交换 问最少交换多少次可以让他变成递增序列 每个数都是独一无二的 其实就是问冒泡往后 最多多少次 但是按普通冒泡记录次数一定会超时 冒泡记录次数的本质是每个数的逆序数相加 因为只有后面的数比自己笑才能交换 但是暴力求逆序数也会超时 于是用树状数组求 从最后往前看 每次求sum相加 但是数据的范围根本开不出来树状数组... 但是由于n最多只有五十万 所以把它离散化一下 把这n个数变成1~n 技巧就是先按大小排序 然后把他们变成1~n 然后按照结构体中的顺序再排回来…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4325 关于离散化的简介:http://blog.csdn.net/gokou_ruri/article/details/7723378 假如数据太大,无法作为数组下标来保存对应的属性而采取的一种方法.只需要关注相对大小即可. 我们记下所有的时间数据,再排序.通过二分查找快速定位元素的位置,然后在线段树或者树状数组上仅仅更新这个映射过后的下标位置.因为不需要从线段树或树状数组上直接获取数据(单纯的线段…
2789: [Poi2012]Letters Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 278  Solved: 185[Submit][Status][Discuss] Description 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B. Input   第一行一个正整数n (2<=n<=1,000,000),表示字符串的…
http://codeforces.com/problemset/problem/61/E 题意是求 i<j<k && a[i]>a[j]>a[k] 的对数 会树状数组求逆序数的话,这个推一下就能出结果: 做法: 1.离散化,由于a[i]能够达到1e9 2.插入a[i]的时候,记录x[i]=i-sum(a[i]); a[i]之前比a[i]大的有x[i]个 3.插入完毕后,求a[i] 之后比a[i]小的数的个数y[i] ans=segma(x[i]*y[i])   注…
Ultra-QuickSort  POJ 2299 Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 50495   Accepted: 18525 Description In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers…
Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数.请输出最少需要修改多少个元素.   Input 第一行输入一个T(1≤T≤10),表示有多少组数据 每一组数据: 第一行输入一个N(1≤N≤105),表示数列的长度 第二行输入N个数A1,A2,...,An. 每一个数列中的元素都是正整数而且不超过106.   Output 对于每组数据,先输出一行 Case #i: 然…
All Possible Increasing Subsequences Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Appoint description:  Description An increasing subsequence from a sequence A1, A2 ... An is defined by Ai1, Ai2 ... Aik, where the follow…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:有n条线段,求被覆盖到次数最多的点的次数 分析: 1.可以转化成求前缀和最大的问题:将区间改成左闭右开(即右端点加1),排序,从左往右遍历,若为左端点则加一,右端点则减一. 2.树状数组,离散化一下,然后区间更新,单点查询. #include <cstdio> #include <cstring> #include <cmath> #include <io…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2227 题意:给你一个集合,让你求递增子序列有多少个,和树状数组求逆序对差不多,不过数据比较大,要离散化一下. #include<cstdio> #include<algorithm> #define FFC(i,a,b) for(int i=a;i<=b;i++) #define LL long long using namespace std; LL tree[]; ,l,r,…
http://acm.hdu.edu.cn/showproblem.php?pid=4325 题意:给出n个区间和m个询问,每个询问为一个x,问有多少个区间包含了x. 思路: 因为数据量比较多,所以需要离散化.区间的离散化需要注意一下,如果端点不连续的话,需要额外插点. 区间情况就用树状数组来维护. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using…
链接 BZOJ 4361 题面 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案,答案模10^9+7. N <= 2000. 题解 中国非著名数学老师张军说过:正难则反-- 答案就是所有最后剩下一个非降序列的方案 - 不合法的最后剩下一个非降序列的方案. 什么是不合法的.最后剩下一个非降序列的方案呢?就是中间过程中已经形成非降序列的方案.它们的共同特点就是--若最后剩下的序列长度为i,则一定是长度为…
题目链接 Description In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input…
5055: 膜法师 Time Limit: 10 Sec  Memory Limit: 128 MB Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然,他能为长者所续的时间,为这三个维度上能量的乘积, 但目前的宇宙很不乐观,胡乱偷取可能造成维度的崩溃, 所以,他必须按逆序偷取这些维度,且在偷取中, 每次偷取的维度的能量必须严格小于他上次偷取的能量, 由于膜法师生活在多元宇宙,所以他可以让所有…
题目链接:http://poj.org/problem?id=2299 题意就是求把数组按从小到大的顺序排列,每次只能交换相邻的两个数, 求至少交换了几次 就是求逆序数 #include<stdio.h> #include<string.h> #include<algorithm> #define N 501000 using namespace std; int a[N], b[N]; __int64 cnt; void Merge(int r, int mid, i…
LINK 题意:给出$(n <= 30000)$个数,$q <= 2e5$个查询,每个查询要求给出$[l,r]$内不同元素的个数 思路:这题可用主席树查询历史版本的方法做,感觉这个比较容易想到...但是主席树不太会用 其次可以用莫队分块的方法暴力过,再来就是使用树状数组维护不同数量的前缀和了,如果不使用离散化直接用map的话还会TLE... 通过维护当前位置上的数所记录的下标最靠右(即最近一次出现的位置),一边维护数量的前缀和,一边检查是否到达某个查询的右边界,再通过前缀性质减一下就得出了.…
这道题题意很简单,就是求逆序数.用暴力的方法是显然会超时的.这里考虑采用树状数组. 采用树状数组话遇到的问题就是需要999,999,999个空间来存放数据,这显然是不可行的.考虑到输入数据最多只有500,000个,那么可以采用离散化的方法来先将输入数据进行映射到较小的空间上,然后再用一般的树状数组操作统计即可. #include <cstdio> #include <algorithm> using namespace std; ; struct Node{ int v; int…
        描述 Description     Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问.Mato每天随机选一个区间[l,r],他今天就看编号在此区间内的这些资料.Mato有一个习惯,他总是从文件大小从小到大看资料.他先把要看的文件按编号顺序依次拷贝出来,再用他写的排序程序给文件大小排序.排序程序可以在1单位时间内交换2个相邻的文件(因为加密需要,不能…
D. Nested Segments 题目连接: http://www.codeforces.com/contest/652/problem/D Description You are given n segments on a line. There are no ends of some segments that coincide. For each segment find the number of segments it contains. Input The first line…