
hdu
文章平均质量分 64
priority_ez
这个作者很懒,什么都没留下…
展开
-
hdu 1394 (Minimum Inversion Number
题意:给你N个数是0~N-1,要求统计它的所有形式的逆序对的最小值。它的所有形式的意思是,不断将数组开头的第一个数放到数组的最后面。分析:注意到给出的数是0~N-1,那么对于第一个数的逆序对个数就是a[1]个。若将第一个数放到数组最后,那么逆序对将减少a[1]个,增加N-a[1]-1个。所以我们只要预处理出一开始数列的逆序对个数再一个一个将数放到队尾即可。代原创 2016-10-22 21:28:46 · 367 阅读 · 0 评论 -
hdu4578
题意:给你一个数组,初始值为零,有四种操作: (1)”1 x y c”,代表 把区间 [x,y] 上的值全部加c。 (2)”2 x y c”,代表 把区间 [x,y] 上的值全部乘以c。 (3)”3 x y c” 代表 把区间 [x,y]上的值全部赋值为c。 (4)”4 x y p” 代表 求区间 [x,y] 上值的p次方和1<=p<=3。分析:明显是线段树维护的题。 一看只有1~3次方就原创 2016-11-02 16:04:08 · 788 阅读 · 0 评论 -
hdu4533
题意:给你N个矩形,每个矩形给出左下角坐标,右上角坐标,有M个询问,每个询问给出一个时间t,问(0,0),(t,t)的范围内矩形的面积和(重叠的也算)。分析:首先我们观察到求的是(0,0),(t,t)的范围内矩形的面积和(重叠的也算)。 ①这是一个正方形,那么我们可以尝试将其转换成一个线段。 (因为n≤20000) ②注意“重叠的面积”。 于是我们分成三个阶段。 在这个阶段,计算原创 2016-10-29 16:27:52 · 538 阅读 · 0 评论 -
hdu3308
题意:给你N个整数,有两种操作, (1)”U A B”,表示把第A个数变成B。 (2)”Q A B”,表示查询区间[A,B]的最长连续上升序列。分析:明显是线段树的题。 lx表示区间左起最长连续上升序列的长度。 rx表示区间右起最长连续上升序列的长度。 mx表示区间最长连续上升序列的长度。 vl表示区间左端点的值。 vr表示区间右端点的值。合并区间:如果当前区间的左儿子的lx等于原创 2016-11-03 21:26:29 · 741 阅读 · 0 评论 -
poj3468
题意:给你N个数,然后有M个操作。有两种类型的操作, (1)“Ca b c”,表示将区间[a,b]里的数加上c。 (2)“Q a b”,表示查询区间[a,b]的数的和。分析:线段树维护区间修改区间求和代码:#include<cstdio>#include<cstring>using namespace std;const int N=1001000;int a[N],n,m,x,y,z原创 2016-10-23 21:48:23 · 505 阅读 · 0 评论 -
hdu1698
题意:给你T组数据,N个数(初始时每个数的值为1),M个操作,每个操作把区间[a,b]里的数更新为c,问最后这N个数的和是多少。分析:线段树区间修改区间求和。代码:#include#includeusing namespace std;const int N=1001000;int n,m,l,r,z,cas;struct tree{int l,r,sum,la原创 2016-10-23 17:42:33 · 388 阅读 · 0 评论 -
hdu1754
题意:给你N个数,M个操作,操作分两类。(1)"QAB“,查询区间[A,B]内的最大值。(2)"UAB",将第A个数的值改成B。分析:线段树单点修改区间维护最大值。代码:#include#includeusing namespace std;const int N=1000100;int n,m,a[N],x,z;struct tree{int l,r,原创 2016-10-23 17:12:15 · 393 阅读 · 0 评论 -
hdu 1166
题意:有N个兵营,每个兵营都给出了人数ai(下标从1开始),有四种命令(1)”Addij",表示第i个营地增加j人。(2)“Sub i j”,表示第i个营地减少j人。(3)“Query ij",查询第i个营地到第j个营地的总人数。(4)”End“,表示命令结束。分析:一道极水的线段树,单点修改乱搞就好了。代码:原创 2016-10-22 22:15:56 · 364 阅读 · 0 评论 -
hdu1717(小数化分数)
题意:将小数化为分数(小数可为循环小数和不循环的普通小数)分析:0.(47)=47.(47)−0.(47)99=47990.(47)=\frac{47.(47)-0.(47)} {99}=\frac{47} {99} 0.32(564)=32564.(564)−32.(564)10000−100=32564−32999000.32(564)=\frac{32564.(564)-32.(564)}原创 2016-11-02 16:56:00 · 758 阅读 · 0 评论 -
数论
重要知识点1.最大公约数ll gcd(ll x,ll y){ if (!x || !y) return x+y; if (x%y==0) return y; return gcd(y,x%y);}2.扩展欧几里得int exgcd(int a,int b,int &x,int &y){ if (b==0) { x=1,y=0;原创 2016-11-02 16:48:39 · 846 阅读 · 0 评论