自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

QiHang的博客

追求卓越,成功自然会跟着你走

  • 博客(90)
  • 收藏
  • 关注

原创 __int128

__int128 getmax(__int128 a,__int128 b){ if (a>b) return(a);else return(b); } void print(__int128 x){ if (x==0) return; if (x) print(x/10); putchar(x%10+'0'); }...

2018-09-05 20:41:48 894

原创 洛古P1725(DP+单调队列)

题意有0~n这样的n+1个位置,每个位置都有一个权值,一个人在这个位置就会获得这个位置的权值A[i]。一个人最开始在0位置权值为0,假设他现在在i,他下一步只能走到[i+L, i+R]的位置。问他走完后获得的最大权值,i >=n就算走完。样例 输入样例#1:5 2 30 12 3 11 7 -2输出样例#1:11题解设dp[i]为到...

2018-08-27 17:09:59 357

原创 BZOJ2212(线段树合并)

题意TP现在有一棵二叉树,所有非叶子节点都有两个孩子。在每个叶子节点上有一个权值(有n个叶子节点,满足这些权值为1..n的一个排列)。可以任意交换每个非叶子节点的左右孩子。要求进行一系列交换,使得最终所有叶子节点的权值按照遍历序写出来,逆序对个数最少。第一行n下面每行,一个数x如果x==0,表示这个节点非叶子节点,递归地向下读入其左孩子和右孩子的信息,如果x!=0,表示这个节...

2018-08-24 15:08:55 477

原创 HDU6406(ST表)

题意给一个长度为n的序列,从i = 1开始贪心的取当前最大的值,记长度len为最大值改变多少次。有m次询问,每次改变序列中的某个值,问改变后len的长度。(n = 1,len = 1)样例 15 31 2 3 4 41 55 52 3题解分前半段和后半段考虑,对于每个位置,dp[0][i]表示从第一个元素到第i个元素的步数,dp[1][i]表示从i贪心...

2018-08-22 11:00:43 813

原创 HDU6415(DP)

题意给两个整数n,m,让你构造一个矩阵n*m的矩阵,此矩阵满足一下两点:1.只有一个元素在它的此行和此列中都是最大的(纳什均衡点)。2.矩阵中1~n*m中的数都恰好出现一次。问有多少种构造方法? 题解从大到小的放,下一个数需要放在已经被放过数的的行和列上,不然这个点就会成为新的纳什均衡点。我们设dp(i,j,k)表示当前已经放了i个数且有j行k列被放过数了。那么就...

2018-08-21 15:14:01 412

原创 HDU6397(容斥)

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;#define maxn 200005typedef long long ll;ll mod = 998244...

2018-08-16 21:34:44 251

原创 树状数组模板

int N, c[maxn];int lowbit(int i) { return i&(-i);}//单点更新void add(int i, int value){ while(i <= N) { c[i] += value; i += lowbit(i); }}//前缀和int sum(int i...

2018-08-14 17:56:56 171

原创 POJ2096(概率DP基础)

 题意一个软件有s个子系统,这个软件会产生n种bug。某人一天发现一个bug,这个bug属于n种bug中的某种bug,发生在某个子系统中。求找到所有的n种bug,且每个子系统都找到bug,这样所要的天数的期望。题解找到某种bug的概率是1/n,属于某个子系统的概率是1/s。设dp[i][j]是找到了i种bug,存在于j个子系统中,此状态下达到目标天数的期望。dp[...

2018-08-13 10:35:55 324

原创 ZOJ3640(概率DP)

题意某人被抓进了洞穴,要想办法逃出来。洞穴有N个出口,每个洞口有一个怪,每个怪有战斗力C[i]。这个人的初始战斗力是f。每天他会选择一个出口逃走。如果他的战斗力f>C[i],那么他可以打败怪物并花费t[i] = (1.0+sqrt(5.0))*0.5*C[i]*C[i](取整)天逃出去。否则他会修炼一天,战斗力提升f = f+c[i]。第二天再随机选择一个出口。此人一定...

2018-08-11 15:57:53 249

原创 SGU 495 Kids and Prizes (概率DP基础)

题意n个盒子里装有礼物,m个人依次随机选择礼物,选完之后空盒子放回问最后选中的礼物数的期望。题解(1)第i个人得到礼物的概率:假如第i-1个人没有得到礼物,那么i得到礼物的概率和i-1一样。假如第i-1个人得到了礼物,那么i得到礼物的概率是i-1得到礼物概率减去1/ndp[i]=(1-dp[i-1])*dp[i-1]+dp[i-1]*(dp[i-1]-1.0/n);...

2018-08-11 11:01:34 291

原创 分数模板

struct fraction { long long numerator; // 分子 long long denominator; // 分母 fraction() { numerator = 0; denominator = 1; } fraction(long long num) { numerator = num; denominator = 1; } f...

2018-08-11 09:18:15 291

原创 HDU6365 (区间DP)

题意以原点(0,0)为中心建立二维坐标轴,在一二象限有一些线段(障碍物)。障碍物信息(H,L,R,W)分别表示高度、左右端点、和防御力。现从原点发出一些射线来消灭这些障碍物,每条射线的能量为X,消灭防御力为Wi的障碍物最小的能量是Wi。并且射线的能量在射穿障碍物是没有能量损耗的。问最少需要多少能量能够消灭所有的障碍。 题解1. 只需要考虑像所有障碍物的两个端点去发...

2018-08-10 16:10:06 500

原创 HDU6356 (ST)

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>#include <iostream>#include <queue>#include <vector>#include <map&a

2018-08-07 17:12:02 274

原创 AC自动机模板

HDU2222求匹配串中模式串出现的个数(不重复)#include<cstdio>#include<algorithm>#include <iostream>#include <string.h>#include <vector>#include <queue>#include <math.h&gt

2018-08-07 11:08:25 199

原创 字典树模板

 int trie[1000010][26];int num[1000010] = {0};int pos = 1;void Insert(char word[]){ int c = 0; for(int i = 0; word[i]; i++) { int n = word[i]-'a'; if(trie[c][n] ==...

2018-08-04 09:12:26 169

原创 KMP算法模板

char mo[10005]; //模式串char str[1000005]; //原串求next数组(其实应该叫最大前缀长数组)int next[10005] = {-1}; int i = 0, j = -1, len = strlen(mo); while(i < len) { //获得next函数 if(j == -1......

2018-08-04 08:49:56 266

原创 BZOJ2038 小Z的袜子(莫队)

题意BZOJ2038题解询问区间(L, R)选两只袜子颜色相同的概率ans = C(a,2) + C(b,2) + C(c,2) + ... / C(R-L+1, 2)找规律可得 (a^2 + b^2 + c^2  - a - b - c) / (R - L + 1)(R - L)即(a^2 + b^2 + c^2 - (R - L + 1) ) / (R - L + 1)...

2018-08-03 16:06:32 197

原创 HDU6333 2018多校第四场(莫队+组合数)

题意T组样例,给两个数n,m,求下式。题解先观察一手杨辉三角找找规律11 11 2 11 3 3 11 4 6 4 1可以得到f(n,m+1)=f(n,m)+C(n,m+1)f(n+1,m)=2f(n,m)-C(n,m).抽象的看由(n,m)可以得到(n-1,m)(n+1,m)(n,m-1)(n,m+1)所以可以用莫队来解决。#includ...

2018-08-03 15:26:38 462 1

原创 HDU6336 2018多校第四场(规律,矩阵前缀和)

题意给你一个由长度为L的数组A构造的无限大矩阵M,矩阵中的数构造方式如下int cursor = 0;for (int i = 0; ; ++i) { for (int j = 0; j <= i; ++j) { M[j][i - j] = A[cursor]; cursor = (cursor + 1) % L; }}输入...

2018-08-02 18:13:10 313

原创 POJ2823(单调队列,二分出队列)

题意给你n个数和一个区间的长度k,求从前往后每个[i,i+k-1] (1<=i<=n-k+1)区间的最大值和最小值。题解用单调队列搞一搞,然后。。。然后就超时了,学习了一下可以二分出队列,就去弄了一下二分(其实k不大的话二分也没啥用啊)。然后。。。然后就超时了。好吧为什么G++就是会超时呢?用C++就过了。代码#include<cstdio>#i...

2018-07-31 17:07:30 469

原创 HDU6319 2018多校第三场(单调队列)

题意给你n个数a[N],求每个m长区间[i,i+m-1](1<=i<=n-m+1)里面的最大值maxval[i]和更新最大值的次数cnt[i](区间从左至右严格大于maxval[i]的次数)。题解利用单调队列可以很好的求出每个区间的maxval,但如果正向跑不好得出cnt,反相跑的话发现每次队列中的值就是cnt。因为维护的是一个单调递减队列,每一次加入的值小于队尾的值就直接...

2018-07-31 10:54:57 245

原创 HDU6278(主席树+二分)

题意区间第k大代码#include<cstdio>#include<algorithm>#include<string.h>#include <string.h>#include <math.h>#include <vector>using namespace std;typedef long l...

2018-07-28 17:21:45 271

原创 POJ1185(状压DP)

题意中文题。题解首先考虑每一行(横向)的影响,每个战队战火波及范围是两格,所以保证(state & state<<1)和(state & state<<2)都要为0。并且每行中最多的状态不是1<<10,正因为战火会影响两格,所以一行的状态最多不超过60。所以可以预处理出每行可行的状态。再考虑列的情况,第i行只会影响到第i-1行...

2018-07-28 16:12:14 473

原创 POJ3254(状压DP)

题意给你一个n*m的矩阵(农田),1表示可以种植,0表示不能种植。且上下和左右每个单元不能相邻。问有多少种种植方法(可以不种植)。样例Sample Input2 31 1 10 1 0Sample Output91 2 30 4 0种植一棵树(1,2,3,4)4种,两棵(13,14,34)3种,三棵(134)1种,零棵树1种,sum = 4+3+1+1 ...

2018-07-28 11:35:39 299

原创 HDU6315(线段树维护区间最小值和区间求和)

题意给定一个初始数组b和一个初始值全部为0的数组a,每次操作可以在给定的区间(l,r)内让a[i](l=<i<=r)加一,或者查询区间区间(l,r)中a[i]/b[i](l=<i<=r)(向下取整取整)的和。题解a[i]/b[i]向下取整,那么a[i]每次加1,a[i]加b[i]次就对总和的贡献加1。那么我们维护一个b数组最小值,每次更新区间最小值tree[rt...

2018-07-26 17:07:47 789

原创 HDU6299 2018多校第一场(贪心)

题意给n个由'('和')'组成的串,问按一定顺序排序后最多有多少个合法匹配的串。题解先将每个串中已经匹配好的串,用栈来去除,会得到一些串三种")))","(((",")))((("。所以每个串都有左括号个数和右括号个数的值,就用这两个值来排序。排序方式:有两种,从左至右的链接串,从右往左的链接串(两者排序方式相反)。从左至右:a[1]+a[2]+a[3]+...+a[n]。...

2018-07-24 18:47:33 218

原创 UVA11400 - Lighting System Design(DP)

题意给定n种类型灯泡,每个灯泡给出其电压v,电源花费k,每个灯的花费c和这种灯泡需求数量l(一套灯光系统总的灯泡数是每种灯泡数量之和),现在通过用电压大的灯泡替换某些电压小的灯泡来减小灯光系统总花费,求最小的花费。题解考虑到替换灯泡只能从低电压想高电压替换,所以最终结果一定是有灯泡被换成了高电压的。所以可以先按照电压大小v来排序。那么动态规划中间的状态就是第i个灯泡前面的一些灯泡被...

2018-07-22 18:55:57 220

原创 UVA - 12563 劲歌金曲(DP 01背包)

题目KTV里面有n首歌曲你可以选择,每首歌曲的时长都给出了(每首歌时长不超过3min). 对于每首歌曲,你最多只能唱1遍. 现在给你一个时间限制t (t<=10^9) , t实际不会超过(180n+678)问你在最多t-1秒的时间内可以唱多少首歌曲num , 且最长唱歌时间是多少time 最终输出num+1 和 time+678 即可(最后唱一首“劲歌金曲”).你需要优先让歌曲数目最...

2018-07-22 12:39:56 265

原创 HDU5919 Sequence II (主席树)

题意给出一个序列,问区间[l, r]中所有不同元素出现的第一个位置(取最左)组成的序列中的中位数。题解如果我们从后往前的话在当前位置i我们在主席树上i这个位置加1,在它之前出现的位置减1,然后我们在主席树询问区间的时候每个数都只出现一次了。查询[l, r]的时候,查询第l个版本的主席树就好,复杂度O(nlogn)。#include <iostream>#incl...

2018-07-22 09:41:22 173

原创 POJ2104求区间第K大(主席树)

#include <iostream>#include <stdlib.h>#include <stdio.h>#include <algorithm>#include <math.h>#include <map>#include <vector>#include <string.h&

2018-07-21 17:29:17 218

原创 HDU1255求矩形面积交(线段树+扫描线)

 分情况讨论1.cnt>1 : 说明该区间被覆盖两次或以上,那么长度就可以直接计算,就是该区间的长度剩下的情况就是cnt=1或cnt=02.先看叶子节点,因为是叶子没有孩子了,所以被覆盖两次货以上的长度就是0(无论cnt=1或cnt=0都是0,因为是叶子。。。)3.不是叶子节点 ,且cnt=1.注意这里,cnt=1确切的意义是什么,应该是,可以确定,这个区间被完全覆盖了1...

2018-07-21 16:12:30 232

原创 HDU1542线段树扫描线求矩形面积

AtlantisTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17436    Accepted Submission(s): 7080 Problem DescriptionThere are several ancie...

2018-07-20 17:05:57 228

原创 STL离散化

typedef long long ll;const int N = 1e5+10;int main(){ int a[N],sub[N]; int n; scanf("%d",&n); for(int i = 0; i < n; i++) { scanf("%d",&sub[i]); a[i] = su...

2018-06-19 21:00:58 515

原创 HDU1166线段树点更新

Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。中...

2018-06-19 20:01:23 142

原创 POJ3468线段树区间修改模板题

题意n个数m个操作1~n的值两种操作:“Q  a  b ”查询区间[a,b]值的和“C  c  a  b”区间[a,b]每个值加c输出每次查询的值代码#include <iostream>#include <stdlib.h>#include <stdio.h>#include <algorithm>#include <math.h&g...

2018-06-06 19:58:41 187

原创 线段树区间更新

为什么要用到区间更新?答:当每次更新区间[a,b]时,如果只用到单点更新,更新n次复杂度为O(n*log(n)),还不知for(a,b)。如何解决?答:新方法:延迟标记(Lazy Tag)    例如对区间[a,b]进行加c操作,如果当前区间与需要修改的区间完全覆盖时,打上一个Lazy标记并停止递归,如果下一次查   询或更改此区间,将这个标记分解传递到其左右孩子。这个思想使复杂度任保持在O(lo...

2018-06-06 19:50:28 488

原创 Gym - 101628A DP

题意:在a字符串中删除某个w子串(可以分散的),问能到多少种b字符串。样例: Input weewrshkimsim Output 1 Input qqqaaabbbcccfffrrrqabcfr Output 729思路:题目意思实则就是求a串中的w串有多少种组成种类。dp[i][j] 表示 a串前i个字符 构成w字符...

2018-05-16 21:13:18 223

原创 CSUOJ 2015Artwork 倒跑并查集

题意:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2015最初给一个n*m的矩形,给q次(操作)询问。每次操作将(x1,y1)到(x2,y2)的小方块涂黑。问每次操作后得到几个互不连通的白色块。思路:将白色的连通块看成一个并查集,将每一次操做保存下来,再从后往前消除黑色块得到白色连通块数量(运用并查集)。代码:

2018-04-10 16:32:32 198

原创 Gym 101353H 树型DP

题意:求一棵树的所有简单路径权值之和,节点1为树的根第一行T组样例每个样例一个n(多少个节点)接下来n-1行每行u,v,w(两个节点,两节点的距离(权值))思路:设dp[u]为以u为根的子树的价值,sz[u]为以u为根的子树的节点数,val[u]为u与所有子节点的距离之和deep[u]为u的深度,设u为当前节点,v为u的子节点val[u]=∑(val[v]+

2018-04-10 09:56:34 220

原创 HDU1520(树型dp)

题意:要开派对,邀请了上司就不能邀请他的下属,邀请了下属就不能邀请他的上司,每个人有一个值,求邀请的人的总值最大思路:树形dp:把每个人看成一个点,则该点有两个状态:邀请或没被邀请定义dp[u][0]为节点没被邀请时的值;dp[u][1]为节点被邀请时的值状态转移方程:dp[u][0]=sum(max(dp[v][0],dp[v][1])//v为u的下属dp[u

2018-04-09 23:37:35 199

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除