1094: 等差区间 Time Limit:5000/3000 MS (Java/Others)   Memory Limit:163840/131072 KB (Java/Others)Total Submissions:655   Accepted:54 [Submit][Status][Discuss] Description 已知一个长度为 n 的数组 a[1],a[2],…,a[n],我们进行 q 次询问,每次询问区间 a[l],a[l+1],…,a[r−1],a[r] ,数字从小到大…
原题大意:原题链接  题解链接 给定一个长为n的数组元素和q次区间[l,r]询问,判断区间[l,r]内元素排序后能否构成等差数列 #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int n,q,l,r; ]; ],ma[maxn][]; ],po[maxn][]; int gcd(int a,int b) { ) ret…
PS: 介绍:http://blog.csdn.net/liang5630/article/details/7917702 RMQ算法.是一个高速求区间最值的离线算法,预处理时间复杂度O(n*log(n)).查询O(1).所以是一个非常高速的算法,当然这个问题用线段树相同可以解决. 1.求区间的最大值和最小值! 代码例如以下: #include <cstdio> #include <cstring> #include <cmath> #include <iostr…
Sequence II Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 849    Accepted Submission(s): 204 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯…
这个题非常有意思的地方是,我们发现区间[1,4]和[5,8]是紧挨着的,因为这个的数代表的是一段区间,原本我们对于普通的离散, a[1]=1,a[2]=5,a[3]=6,a[4]=8;数组下标就是重新离散的位置,但是a[2]和a[3]明显不重叠,为此我们需要重新考虑离散的内容,其实不妨这样,如果区间的间隔大于1,那么我们插入一个数a[i]+1,这样就强行把a[i]和a[i+1]分开,因为 如三张海报为:1~10 1~4 6~10 离散化时 X[ 1 ] = 1, X[ 2 ] = 4, X[ 3…
思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i]  覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s;  l-1=<k<=r-1 (可我总是想着从后到前,从 前到后反而更好理解) 3  离散区间---使用线段树求区间最值  时间复杂度O(nlogn) ps (一定忍住不看别人的代码,继续加油) #include <bits/stdc++.h> #define lson l,m,rt*2…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 题目大意: 给出一数组,以及m个查询区间,每次查询该区间不同数字的和.相同数字只加一次. 解题思路: 离线区间,按照区间右端点进行排序. 这样可以从左到右扫一遍,用尺取法一个一个将数字放入树状数组中. 如果这个数字已经在树状数组里面,记录之前的下标,再从树状数组中删去之前下标的这个数字,在当前下标添加该数字.这样可以保证每一步操作,都会使得树状数组中没有重复元素.这样可以直接用树状数组求不同…
先给出一个经典的区间处理方法 对每个区间 我们对其起点用绿色标识  终点用蓝色标识 然后把所有的点离散在一个坐标轴上 如下图 这样做有什么意义呢.由于我们的区间可以离散的放在一条轴上面那么我们在枚举区间的时候 0(n)的复杂度就可以了 具体的操作 我们看两道题目 http://codeforces.com/contest/822/problem/C C. Hacker, pack your bags! time limit per test 2 seconds memory limit per…
A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 163977   Accepted: 50540 Case Time Limit: 2000MS Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type o…
hdu 3183 A Magic Lamp RMQ ST 坐标最小值 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 题目大意: 从给定的串中挑出来m个数使得剩余的数字最小,串的序列不能改变 思路: 将问题转化为求在n个数中挑选n-m个数,使之最小.假设最极端的情况,所有最大的数字都在左侧,占据了m个位置,那么我们需要挑选的最小的数字的第一位就是在m+1位上.依次类推,第二位在m+2位上,最后一位也就在原串的最后一位上.反过来,假设最大的数…
转自:http://blog.csdn.net/lilongherolilong/article/details/6624390 先挖好坑,明天该去郑轻找虐 RMQ(Range Minimum/Maximum Query)问题是求区间最值问题.你当然可以写个O(n)的(怎么写都可以吧=_=),但是万一要询问最值1000000遍,估计你就要挂了.这时候你可以放心地写一个线段树(前提是不写错)应该不会挂.但是,这里有更简单的算法,就是ST算法,它可以做到O(nlogn)的预处理,O(1)地回答每个询…
Description You are given circular array a0, a1, ..., an - 1. There are two types of operations with it: inc(lf, rg, v) - this operation increases each element on the segment [lf, rg] (inclusively) by v; rmq(lf, rg) - this operation returns minimal v…
简介 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题. RMQ(Range Minimum/Maximum Query),即区间最值查询,这是一种在线算法,所谓在线算法,是指用户每次输入一个查询,便马上处理一个查询.RMQ算法一般用较长时间做预处理,时间复杂度为O(nlogn),然后可以在O(1)的时间内处理每次查…
给定一个循环数组a0, a1, a2, …, an-1,现在对他们有两个操作: Inc(le, ri, v):表示区间[le, ri]范围的数值增加v Rmq(le, ri):表示询问区间[le, ri]范围内的最小值 注意,这个是循环数组,所以如果n=5, le=3, ri=1,那么询问的是a3, a4, a0, a1中的最小值. 帮助BSNY写一个程序完成上述操作. [数据规模和约定] 1<= n <=200000   0<=Q<=200000 -10^6<= ai &l…
记录一下一个新学的线段树基础trick(真就小学生trick呗) 给你一个1到n的排列,你需要判断该排列内部是否存在一个3个元素的子序列(可以不连续),使得这个子序列是等差序列.\(n\) <=3e5 考虑等差数列的相关性质,对于一个3个数的等差数列,当 \(a_i\) 作为中间项可行时,当且仅当一定存在至少1个 \(k\),使得 \(a_i-k\) 这个元素在它的左边,\(a_i+k\) 这个元素在它的右边 (为了方便,这里的 \(k\)可以是负数) 那我们在顺序枚举 \(a_i\) 的过程中…
题目链接:https://cn.vjudge.net/problem/HRBUST-1188 每一次按照二进制的方式进行更新,二维数组dp [i] [j],i表示下标,j表示从i 开始的往后移动2的j-1次方个数再-1. AC代码: #include<iostream> #include<cmath> #include<stack> #include<iomanip> #include<queue> #include<cstring>…
//重叠区间数 #define N 2 typedef struct arrange { int x; int y; } Arrange; //先按左边界排序,若相等再按右边界排序(升序) int cmp(const void* a1, const void* a2) { if ((*(const Arrange*) a1).x == (*(const Arrange*) a2).x) { return (*(const Arrange*) a1).y - (*(const Arrange*)…
这三题均可以用树状数组.分块或线段树来做 #130. 树状数组 1 :单点修改,区间查询 题目链接:https://loj.ac/problem/130 题目描述 这是一道模板题. 给定数列 a[1], a[2], \dots, a[n]a[1],a[2],…,a[n],你需要依次进行 qq 个操作,操作有两类: 1 i x:给定 i,xi,x,将 a[i]a[i] 加上 xx: 2 l r:给定 l,rl,r,求 \sum_{i=l}^ra[i]∑i=lr​a[i] 的值(换言之,求 a[l]…
点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std; #define maxn 50005 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 ]; int a[maxn],head[maxn],tot; int deep[maxn],fa[maxn],son[maxn],num[max…
Count the Colors Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Practice ZOJ 1610 Description Painting some colored segments on a line, some previously painted segments may be covered by some the subsequent o…
题目链接 题意 : 中文题 分析 : 首先引入两篇写的很好的题解 题解一.题解二 听说这种和异或相关区间求和的问题都尽量按位考虑 首先第一问.按二进制位计贡献的话.那么对于第 k 位而言 其贡献 = 区间异或和第 k 位为 1 的子区间个数 * 2^k 而能产生贡献的子区间必定满足 xorSum(R) ^ xorSum(L-1) 第 k 位为 1 注 : xorSum 为前缀异或和 要快速计算这个东西其实很简单.先计算出 xorSum 然后枚举右端点 R .累计到目前为止每个位的 0 和 1 的…
C 用scanf("%s")就会WA..不知道为什么 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_back using namespace std; typedef long long ll; typedef unsigned long long ull; ][] = {{, }, {, }, {, -}, { -, }, {, }, {,…
For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a contiguous range of cows fr…
下面是别人的解题报告的链接,讲解很详细,要注意细节的处理...以及为什么可以这样做 http://blog.csdn.net/woshi250hua/article/details/7824433 我的代码: //其中求凸包用的是Andrew扫描算法,复杂度主要为排序O(n*logn),扫描为O(n) #include <cstdio> #include <algorithm> #define INF 100000000 #define min(a,b) a<b?a:b; u…
Water Problem Time Limit:3000/1000 MS (Java/Others)   Memory Limit:163840/131072 KB (Java/Others)Total Submissions:1228   Accepted:121 [Submit][Status][Discuss] Description 函数 f:Z+→Z .已知 f(1),f(2) 的值,且对于任意 x>1,有 f(x+1)=f(x)+f(x−1)+sin(πx2) . 求 f(n) 的…
范围最小值问题(Range Minium Query,RMQ)---RMQ问题 一.一维问题 给出一个n个元素的数组A1,A2,...,An, 设计一个数据结构, 支持查询操作Query(L,R):计算min(AL,AL+1,...AR) 显然, 用一个循环来计算最小值 显然不够快, 即使是前缀和的思想也不能提高效率! 那么, 实践中最常用的是Tarjan的Sparse-Table算法(就是ST表) 预处理时间:O(nlogn) 查询时间:O(1) (这个算法非常好写,而且还不容易出错) (其实…
1.基本图表绘制 plt.plot() 图表类别:线形图.柱状图.密度图,以横纵坐标两个维度为主同时可延展出多种其他图表样式 plt.plot(kind='line', ax=None, figsize=None, use_index=True, title=None, grid=None, legend=False, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, yl…
题意:题目简化了就是要给你n个区间,然后让你选出k个区间  使得这k个区间有公共交集:问这个公共交集最大能是多少,并且输出所选的k个区间.如果有多组答案,则输出任意一种.   这题是用优先队列来处理区间问题的,感觉挺典型的所以记录下来.   首先,要知道 选取的k个区间的最大交集=区间右端点中的最小值-区间左端点中的最大值.那么,要求得这这么k个区间是公共交集最大,就创建一个最小堆的优先队列(只存放区间的右端点):然后按左端点从小到大(先将区间按左端点排序)将区间放入优先队列中.每当优先队列的大…
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; ; int a[N],n,m,tmp; struct tree{ int l,r,gcd,sum; }tr[N*]; int gcd(int x,int y){ )return x; else return gcd(y,x%y)…
matplotlib官方文档:https://matplotlib.org/contents.html?v=20190307135750 matplotlib是一个绘图库,它可以创建常用的统计图,包括条形图.箱型图.折线图.散点图.饼图和直方图. 一.条形图bar() import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'c:…