思路:先用splay处理出弹珠序列,然后就是斜率优化了

首先有f[i]=-a[i]*p[j]+q[j]

稍微变形得q[j]=a[i]*p[j]+f[i]

用单调栈维护上凸壳,询问时二分,然后就没有然后了。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define max(a,b) a>b?a:b
#define ll long long
const int maxn=400010,inf=(int)1e9;
const double eps=1e-9;
using namespace std;
int n,m,a[maxn],cnt,top,q[maxn];ll f[maxn];char op[10],ch;
struct node{ll x,y;}p[maxn];
void read(int &x){for (ch=getchar();!isdigit(ch);ch=getchar());for (x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());
}
struct Spy{int fa[maxn],c[maxn][2],size[maxn],val[maxn],root,tot;int newnode(int v){val[++tot]=v,size[tot]=1,fa[tot]=c[tot][0]=c[tot][1]=0;return tot;}void clear(){tot=c[1][1]=size[1]=2,root=fa[2]=size[2]=1;}int which(int x){return c[fa[x]][1]==x;}void update(int x){size[x]=size[c[x][0]]+size[c[x][1]]+1;}void rotate(int x){int y=fa[x],z=fa[y],nx=which(x),ny=which(y);fa[c[x][!nx]]=y,c[y][nx]=c[x][!nx];fa[x]=z;if (z) c[z][ny]=x;fa[y]=x,c[x][!nx]=y;update(y);}void splay(int x){while (fa[x]){if (!fa[fa[x]]) rotate(x);else if (which(fa[x])==which(x)) rotate(fa[x]),rotate(x);else rotate(x),rotate(x);}root=x,update(x);}int getpos(int rank){for (int x=root;;){//printf("rank%d %d %d %d\n",rank,size[root],size[c[root][0]],size[c[root][1]]);if (rank<size[c[x][0]]+1) x=c[x][0];else if (rank==size[c[x][0]]+1) return x;else rank-=(size[c[x][0]]+1),x=c[x][1];}}void modify(int rank,int v){int x=getpos(rank);val[x]=v,splay(x);}void insert(int rank,int v){int x=getpos(rank);splay(x);int xx=c[x][1];for (;c[xx][0];xx=c[xx][0]) ;c[xx][0]=newnode(v),fa[tot]=xx,splay(tot);}void get(int x){if (c[x][0]) get(c[x][0]);if (x!=1&&x!=2) a[++cnt]=val[x];if (c[x][1]) get(c[x][1]);}
}T;double slope(int i,int j){if (i==0||j==0) return inf;  if (i==inf||j==inf) return -inf;  return 1.0*(p[i].y-p[j].y)/(double)(p[i].x-p[j].x);
}void work(){q[0]=0,q[top=1]=1,q[top+1]=inf;for (int i=2;i<=n;i++){int l=1,r=top,mid=(l+r)>>1;while (1){if (slope(q[mid-1],q[mid])+eps>=a[i]&&slope(q[mid],q[mid+1])<=eps+a[i]){break;}if (slope(q[mid],q[mid+1])>eps+a[i]) l=mid+1;else r=mid-1;mid=(l+r)>>1;}f[i]=-p[q[mid]].x*a[i]+p[q[mid]].y;while (top>1&&slope(q[top-1],q[top])<slope(q[top],i)) --top;q[++top]=i;q[top+1]=inf;}for (int i=2;i<=n;i++) printf("%lld\n",max(0,f[i]));
}int main(){scanf("%d%d",&n,&m),T.clear();for (int i=1,x,y;i<=m;i++){scanf("%s",op);read(x),read(y);if (op[0]=='I') T.insert(x+1,y);else T.modify(x+2,y);}T.get(T.root);//for (int i=1;i<=cnt;i++) printf("%d\n",a[i]);for (int i=1,x,y;i<=n;i++) read(x),read(y),p[i].x=x,p[i].y=y;work();return 0;
}

转载于:https://www.cnblogs.com/thythy/p/5493581.html

bzoj4172: 弹珠相关推荐

  1. [Usaco2007 Oct] Super Paintball超级弹珠

    Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 489  Solved: 384 [Submit][Status][Discuss] Descriptio ...

  2. debounceTime 和 throttleTime 的弹珠图

    debounceTime:测试代码 import {concat,debounceTime,filter,interval,mapTo,of,take,throttleTime, } from 'rx ...

  3. 小手工纸盒机器人_亲子手工 | DIY弹珠迷宫小黑手自制玩具系列

    上周用鞋盒做的迷你桌球受到很多男孩子的喜欢 今天小黑手又做了一个瓦楞纸手工 「弹珠迷宫」也是喜欢的爱不释手呢 暑假小黑手系列,希望也能攒出个自己的小游乐场 自己动手做自己的玩具,买玩具的钱可以省了 快 ...

  4. ssr怎么编辑服务器ip_“阴阳师”IP影响力有多大?网易用它做了一款弹珠游戏,TapTap评分高达9.8分...

    文|手游那点事|虹彤.Jimmy "阴阳师"IP衍生的想象空间到底有多大? 在今年的"520发布会"上,网易非常大手笔地公布了<阴阳师>IP的一系列 ...

  5. 13 登陆_《星球大战:弹珠台》中文版即将登陆Switch 12月13日正式发售

    日前,发行商Game Source Entertainment宣布,由Zen Studios开发<星球大战:弹珠台>Switch简/繁体中文版,将在12月13日正式发售. 本作是第一款将于 ...

  6. python 乒乓球_python使用pygame实现笑脸乒乓球弹珠球游戏

    今天我们用python和pygame实现一个乒乓球的小游戏,或者叫弹珠球游戏. 笑脸乒乓球游戏功能介绍 乒乓球游戏功能如下: 乒乓球从屏幕上方落下,用鼠标来移动球拍,使其反弹回去,并获得得分,如果没有 ...

  7. 滚铁环,跳橡皮筋,斗鸡,打弹珠,老鹰捉小鸡…………

    看到这些游戏名称,似曾相识吧,那就让我们来怀念一下怀旧一下,毫无疑问,我小时候经常玩这些游戏,应该很环保很健康很有趣,但如今我都成为孩子他爸了,再看看我的小孩,现在的环境估计很难玩得上这些游戏了,幼儿 ...

  8. linux弹珠游戏实现,弹珠游戏台玩具的详细制作图解

    图片:20180207_171332_3125.jpg 图片:20180207_171332_3127.jpg 图片:20180207_171332_3128.jpg 图片:20180207_1713 ...

  9. LCP 63 弹珠游戏

    文章目录 题目 注意: 示例 1: 示例 2: 示例 3: c++代码 题目 N*M 大小的弹珠盘的初始状态信息记录于一维字符串型数组 plate 中,数组中的每个元素为仅由 "O" ...

  10. PyGame弹珠游戏双人粗略版

    # _*_ coding:utf-8 _*_ import pygame from pygame.locals import * from sys import exit__author__ = 'a ...

最新文章

  1. Go 学习笔记(36)— 基于Go方法的面向对象(封装、继承、多态)
  2. python获取用户输入中文_python中的用户输入
  3. OKGAN:线上训练GAN的方法
  4. NSMethodSignature和NSInvocation的用法
  5. [小技巧][Java]Arrays.fill() 初始化 二维数组
  6. 常见的Activity Action Intent常量
  7. 安卓学习笔记40:基于套接字网络编程
  8. 自动化测试 (三) Web自动化测试原理
  9. (12)机器学习_特征选择
  10. 【路径规划】基于matlab遗传算法求解同时取送货车辆路径问题【含Matlab源码 1072期】
  11. 19.华为笔试题整理
  12. 简述P问题,NP问题,NP完全问题以及NP Hard问题
  13. vue 富文本编辑器上传图片到服务器并显示到富文本中
  14. 2021-11-07-防火墙添加安全策略
  15. 通过motion实现摄像头远程监控(转)
  16. C++结构型模式-适配器模式
  17. 云南企业私有云平台搭建解决方案、Zstack云平台管理软件介绍
  18. Android版本和SDK版本
  19. linux强制移除pdf密码,linux-使用PDFtk删除pdf文件的最后一页?
  20. 三大思维导图软件比较

热门文章

  1. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0x80 in position 2
  2. python、java、C三种方法打印乘法表
  3. 面试必会 InnoDB的多版本并发控制(MVCC)
  4. python--图像轮廓findContours
  5. 营山天气预报软件测试,营山天气预报15天
  6. FISCO BCOS Solidity 智能合约 批量插入新增数据
  7. 自定义rest api的基本思想过程--总结
  8. 六、Linux常用命令——压缩解压缩命令
  9. 九、面向对象三大特征(三)—— 多态
  10. 对于tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))的研究