摘要:
还以为是dp呢 首先默认答案是n 对于一个影子,如果前边的影子比它高则可以归进前面的影子,高处的一段单算; 和他一样高的话就不用单算了,ans ; 否则入栈 阅读全文
摘要:
我是怎么想出来的…… 把种族为0的都变成 1,按位置x排升序之后,s[i]表示种族前缀和,想要取(l,r)的话就要\\( s[r] s[l 1]==0 s[r]==s[l 1] \\),用一个map存每个s[i]最早出现的牛的下一个牛的位置,然后每次取到一个s[i],如果mp[s[i]]!=0,则用 阅读全文
摘要:
参考:https://blog.csdn.net/u010336344/article/details/53034372 神一样的线段树 线段树上维护:ll从左开始最长空段;rr从右开始最长空段;len区间中最长空段;tg: 1不全是空的,0区间内全是空的,1区间内全是满的;lz下传标记: 1没标记 阅读全文
摘要:
脑子一抽写了个堆,发现不对才想起来最值用二分 然后判断的时候贪心的把不合mid的区间打通,看打通次数是否小于等于m即可 阅读全文
摘要:
高端贪心,好久没写splay调了好久…… 以下v为价格,w为鲜嫩度 把牛和草都按v排升序,扫草,首先把v小于等于当前草的牛都丢进splay,这样一来splay里全是可选的牛了,按w排序,然后贪心的为当前的草取牛:w小于等于当前草的w的牛,取出来删除,ans加上当前草的价格(没有则跳过) 取牛的时候统 阅读全文
摘要:
参考:https://blog.csdn.net/qq_34564984/article/details/53843777 可能背了假的板子…… 对于每个灯建立方程:与它相邻的灯的开关次数的异或和为1 异或高斯消元,然后dfs,遇到自由元就分两种情况走,答案取max,加上最优性剪枝 cpp incl 阅读全文
摘要:
从每个奶牛所在草场dfs,把沿途dfs到的草场的con都+1,最后符合条件的草场就是con==k的,扫一遍统计一下即可 cpp include include using namespace std; const int K=105,N=1005; int k,n,m,p[K],h[N],cnt,c 阅读全文
摘要:
先跑一遍取max版的Floyd,直接用数组回答询问即可 cpp include include using namespace std; const int N=305,inf=1e9; int n,m,q,a[N][N]; int read() { int r=0,f=1; char p=getc 阅读全文
摘要:
考虑每头牛到达之后的影响,u到达之后,从1到其子树内的点需要放慢的都多了一个,p为u子树内点的牛ans会加1 用线段树维护dfs序,每次修改子树区间,答案直接单点查询p即可 cpp include include using namespace std; const int N=100005; in 阅读全文
摘要:
凸包模板 cpp include include include include using namespace std; const int N=5005; int n,w,top; struct dian { double x,y; dian(double X=0,double Y=0) { x 阅读全文
摘要:
参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp……做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i][j]为时间为i能力为j的最大滑雪次数,预处理l[i][j]为在i时获得j能力的最晚开始时间,w[i 阅读全文