博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
p4475 巧克力王国
阅读量:7216 次
发布时间:2019-06-29

本文共 1338 字,大约阅读时间需要 4 分钟。

分析

我们多维护一个值,代表某个点子树中所有点的权值和

于是如果某个点它的min和max乘a(/b)的值小于范围则直接把整个子树都加进去

估价函数就是这个点的子树中的理论最小值

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define int long longconst int inf = 1e9;inline int ra(){ int x=0,f=1;char s=getchar(); while(!isdigit(s)){ if(s=='-')f=-1;s=getchar();} while(isdigit(s))x=(x<<3)+(x<<1)+(s-'0'),s=getchar(); return x*f;}struct kd { int d[2],mx[2],mn[2],le,ri,id,sum,val;};kd t[300100],now;int n,m,root,wh,Ans;inline bool operator < (kd a,kd b){ return a.d[wh]
>1; x=mid; nth_element(t+le,t+x,t+ri+1); for(int i=0;i<2;++i) t[x].mn[i]=t[x].mx[i]=t[x].d[i]; if(le
x)build(t[x].ri,mid+1,ri,wwh^1); up(x);}inline int getd(kd a,kd b){ if(!a.id)return inf; int res=0; for(int i=0;i<2;++i)res+=a.d[i]*b.d[i]; return res;}inline int calc(int x){ if(!x)return inf; int res=0; for(int i=0;i<2;++i) res+=min(t[x].mn[i]*now.d[i],t[x].mx[i]*now.d[i]); return res;}inline int getmax(int x){ if(!x)return inf; int res=0; for(int i=0;i<2;++i) res+=max(t[x].mn[i]*now.d[i],t[x].mx[i]*now.d[i]); return res;}inline void qurey(int x){ if(!x)return; if(getmax(x)

转载于:https://www.cnblogs.com/yzxverygood/p/10562729.html

你可能感兴趣的文章
IASetIndexBuffer Offset
查看>>
TeamLab安装及使用
查看>>
很安逸的离线API文档查询工具Dash和Zeal
查看>>
ICAP: 互换客户端地址协议
查看>>
Nginx-rtmp 直播媒体实时流实现
查看>>
C++ const 理解
查看>>
Linux进程管理 (7)实时调度
查看>>
基于鲁棒图进行概念架构设计
查看>>
Permission denied: exec of '/var/www/html/bugzilla/index.cgi' failed
查看>>
LESS CSS 框架简介与使用
查看>>
2014.09线上课堂报名帖:敏捷个人手机应用使用
查看>>
C# 重启exe
查看>>
Web 服务器 之 简易WWW服务器的架设
查看>>
一种电子病历系统软件框架思想
查看>>
轻松破解NewzCrawler时间限制
查看>>
gDebugger 3.1.1 原版+破解
查看>>
C++ 对象的内存布局(上)
查看>>
在Outlook中用VBA导出HTML格式邮件
查看>>
搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门
查看>>
PHP——通过下拉列表选择时间(转)
查看>>