令$a_{i,j}(j\le i)$表示第i个人的方案中给第j个人$a_{i,j}$的钱,有以下性质:
1.如果第j个人一定同意(否则就会死)第i个人的方案,那么$a_{i,j}=0$(容易发现一定同意的人就是在上一个不是-1之后的人)
2.否则$a_{i,j}=1+\max_{1\le t<i}a_{t,j}$,尽量选择最小的,当无法成立就令$a_{i,j}=0$
那么这个过程初始是$a_{1}=k$,然后每一次操作包含以下几步:
初始的a是上一次可以通过的方案,之间死的人都是-1(这样+1刚好为0)
求出a中前$v[i]-1$小的和+$v[i]-1$与$k$判断,如果小于等于k即可行,剩下的钱就是i本身的
如果可行,删除不是前$v[i]-1$小的点,并加入等量的0,然后打一个全局的$tag+=1$标记
这个过程用平衡树维护即可(权值线段树内存不够) 

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2000005
4 #define ll long long
5 #define pii pair<int,int>
6 #define fi first
7 #define se second
8 #define s(p) son[k][p]
9 int V,n,r,x,tag,tot[N],sz[N],ra[N],son[N][2];
10 ll k,ans,a[N],f[N];
11 void up(int k){
12 sz[k]=sz[s(0)]+sz[s(1)]+tot[k];
13 f[k]=1LL*a[k]*tot[k]+f[s(0)]+f[s(1)];
14 }
15 void rotate(int &k,int u,int p){
16 s(p)=son[u][p^1];
17 son[u][p^1]=k;
18 up(k);
19 k=u;
20 }
21 void add(int &k,ll x,int y){
22 if (!k){
23 k=++V;
24 a[k]=f[k]=x;
25 ra[k]=rand();
26 }
27 if (a[k]==x){
28 tot[k]+=y;
29 up(k);
30 return;
31 }
32 bool p=(a[k]<x);
33 add(s(p),x,y);
34 if (ra[s(p)]<ra[k])rotate(k,s(p),p);
35 up(k);
36 }
37 ll query(int k,int x){
38 if (!k)return 0;
39 if (x<=sz[s(0)])return query(s(0),x);
40 if (x<=sz[s(0)]+tot[k])return f[s(0)]+1LL*a[k]*(x-sz[s(0)]);
41 return f[s(0)]+1LL*a[k]*tot[k]+query(s(1),x-sz[s(0)]-tot[k]);
42 }
43 void del(int &k,int x){
44 if (!k)return;
45 if (x<=sz[s(0)])del(k=s(0),x);
46 else
47 if (x>sz[s(0)]+tot[k])del(s(1),x-sz[s(0)]-tot[k]);
48 else{
49 tot[k]-=sz[s(0)]+tot[k]-x;
50 s(1)=0;
51 }
52 up(k);
53 }
54 int main(){
55 scanf("%d%lld",&n,&k);
56 for(int i=1;i<=n;i++){
57 scanf("%d",&x);
58 ans=max(k-(query(r,x-1)+(x-1LL)*(tag+1)),-1LL);
59 if (ans!=-1){
60 int s=sz[r]-(x-1);
61 del(r,x-1);
62 tag++;
63 add(r,-tag,s);
64 }
65 add(r,ans-tag,1);
66 printf("%lld\n",ans);
67 }
68 }

[noi1994]海盗的更多相关文章

  1. bnu24252 海盗分赃

    题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=24252 这是四川2012年省赛的一道题,背景:海盗分宝藏.大概题意:给你N种价值的物品,物品有两 ...

  2. NYOJ 994 海盗分金 逆向递推

    链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=994 题意: 有n个海盗劫得了窖藏的m块金子,并准备瓜分这些战利品.按照古老流传下来的分金法则 ...

  3. 【HDU1538】A Puzzle for Pirates(经典的海盗问题)

    [题目] Description A bunch of pirates have gotten their hands on a hoard of gold pieces and wish to di ...

  4. 【 HDU 1538 】A Puzzle for Pirates (海盗博弈论)

    BUPT2017 wintertraining(15) #5D HDU 1538 偷懒直接放个果壳的链接了,感觉比网上直接找这题的题解要更正确.易懂. 海盗博弈论 代码 #include <cs ...

  5. 2012年蓝桥杯省赛A组c++第3题(喝断片的海盗)

    /* 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒, 所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的, 再次重复...... 直到开了第4瓶酒,坐着的已经所剩无 ...

  6. ZBrush细说3D海盗角色的创建艺术

    一提到海盗,就不由自主想到了<加勒比海盗>,那个帅得一塌糊涂的杰克船长更是让人夜不能寐寝难安,但在艺术的世界里,角色无美丑,今天我们要讲的这位海盗,就与“帅气”八竿子打不着了,它甚至有点古 ...

  7. 海盗分金问题SQL求解(贪心算法)

    问题 经济学上有个"海盗分金"模型:是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨 ...

  8. 浙大PAT 2-10. 海盗分赃——经典博弈

    题意 P个海盗偷了D颗钻石后分赃($3 \leq P, D\leq 100$),采用分赃策略: 从1号开始,提出一个分配金币的方案,如果能够得到包括1号在内的绝对多数(即大于半数)同意,则执行该方案, ...

  9. java实现海盗比酒量

    ** 海盗比酒量** 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复- 直到开了第4瓶酒,坐着的已经所剩 ...

随机推荐

  1. 独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

    作者 | 杨丽 出品 | 雷锋网产业组 "Serverless 其实离我们并没有那么遥远". 如果你是一名互联网研发人员,那么极有可能了解并应用过 Serverless 这套技术体 ...

  2. linux kill信号详解

    大家对kill -9 肯定非常熟悉,在工作中也经常用到.特别是你去重启tomcat时.可是多半看来,我们对-9的理解只是表面而已. 很少有人(包括我)认真的去了解一下 kill -n 这个n到底是什么 ...

  3. python-docx处理Word必备工具

      我的理解 为什么会用到python-docx,因为近段时间下载了大量网文,但格式都是html的,我个人习惯使用word处理文字,于是就想法设法把html文档转换为word,首先要考虑的问题就是从h ...

  4. SPOJ16636 Journey IE2

    SPOJ16636 Journey IE2 更好的阅读体验 在Byteland有n个城市,编号从1到n.这些城市由m条双向道路网络连接.众所周知,每一对城市最多只能由一条道路连接. Byteman最近 ...

  5. 2020.5.16-ICPC Central Europe Regional Contest 2019

    A. ABB #include <bits/stdc++.h> using namespace std; #define PB push_back #define ZERO (1e-10) ...

  6. 超详细的Ribbon源码解析

    Ribbon简介 什么是Ribbon? Ribbon是springcloud下的客户端负载均衡器,消费者在通过服务别名调用服务时,需要通过Ribbon做负载均衡获取实际的服务调用地址,然后通过http ...

  7. Hive架构及搭建方式

    目录 前言 hive的基础知识 基本架构 metastore 内嵌服务和数据库 内嵌服务 服务和数据库单独部署 hcatalog 客户端 客户端的本地模式 beeline beeline的自动模式 j ...

  8. [对对子队]会议记录5.27(Scrum Meeting12)

    今天已完成的工作 朱俊豪 ​ 工作内容:寻找电池模型和BGM,修改关卡选择场景 ​ 相关issue:优化初步导出版本 ​ 相关签入:perf:地图界面优化 feat:更新系列资源(星星,大电池) 何瑞 ...

  9. SpringCloud+RocketMQ实现分布式事务

    随着互联网公司的微服务越来越多,分布式事务已经成为了我们的经常使用的.所以我们来一步一步的实现基于RocketMQ的分布式事务.接下来,我们将要做的主题写出来. RocketMQ的分布式事务结构和说明 ...

  10. Noip模拟15 2021.7.14

    T1 夜莺与玫瑰 题目越发的变态起来... 这题刚开始看超级像仪仗队,好不容易码完欧拉函数后尝试×2后输出但不对!! 于是选择了跳过.... 正解居然是莫比乌斯函数....我也是醉了 预处理完就剩下$ ...