摘要:
因为d>=0,所以一个位置的数只会单调不降并且只会有一次穿过0.用这个性质,我们我可在线段树中记录正数负数的个数和和,以及最大的负数以及答案.修改操作:如果当前最大负数+d 11 #include 12 #include 13 #define min(a,b) ((a)(b)?(a):(b)) ... 阅读全文
摘要:
先对原串分组hash,查询就是看某一区间内是否出现某值.可以每个值存一个集合,保存这个值出现的位置.(也可以建可持久化值域线段树)map >很省事...(Yes写成了YES,狂WA) 1 #include 2 #include 3 #include 4 #define N 1000010 5 ... 阅读全文
摘要:
枚举1的个数,统计有那么多1的数的个数 1 /************************************************************** 2 Problem: 3209 3 User: idy002 4 Language: C++ 5 ... 阅读全文
摘要:
开方操作最多进行5次就可以把出现的任何数变成1.所以用线段树暴力修改,以后修改时只需看一下是否当前区间都是0或1,如果是那么就直接返回. 1 /************************************************************** 2 Problem: ... 阅读全文
摘要:
看到这道题感觉像是网络流,如果没有权值,可以用DAG最小路径覆盖,有权值,感觉可以求一个上下界最小可行流,但内存卡了....时间估计也悬.正解要用到一些数学知识,这里梳理一下:定义: 偏序关系: 满足自反,反对称,传递的关系是自反关系 链: 偏序集A的一个子集B,并且满足B中元素两两可比 反链... 阅读全文
摘要:
简化题意: 给定两个集合A,B,A集合有一个权值,并且对应一个B集合的子集,求A的一个子集,满足权值和最小且对应的子集的并集是B集合.感觉像网络流,但因为每个B中的元素对应一个A中的元素就行了,是or而不是and,所以割就无能为力了.于是去orz rzz.他的题解: 把中间的点按x坐标排序,f[i]... 阅读全文
摘要:
算法步骤: 1. 先将原图像最大可行流那样变换,唯一不同的是不加dst->src那条边来将它变成无源无汇的网络流图.直接跑一边超级源到超级汇的最大流. 2. 加上刚才没有加上的那条边p 3. 再跑一遍超级源汇之间的最大流,p的流量就是我们要求的最小可行流流量(等于其反向边的"容量")收获: ... 阅读全文
摘要:
收获:1. 上下界网络流求最大流步骤: 1) 建出无环无汇的网络,并看是否存在可行流 2) 如果存在,那么以原来的源汇跑一次最大流 3) 流量下界加上当前网络每条边的流量就是最大可行流了.2. 输出方案: 可以把边的位置信息一起存在边表中,求完最大流后遍历一下边,把信息更新过去. 1 #i... 阅读全文