题目传送门

前置知识

线段树

解法

第一眼感觉和 luogu P1083 [NOIP2012 提高组] 借教室 很像。本题同样采用线段树维护,\(sum_{l,r}(1 \le l \le r \le 10^6)\) 表示从 \(l \sim r\) 时刻内骑士拜访的总时间,\(maxx_{l,r}(1 \le l \le r \le 10^6)\) 表示从 \(l \sim r\) 时刻内骑士拜访完的最后时间。

build 函数和普通线段树一样。

update 函数和普通单点修改一样。

pushup 函数是本题一个难点。考虑对于从 \(l \sim r(1 \le l \le r \le 10^6)\) 时刻,如果左区间 \(l \sim mid\) 时刻骑士拜访完的最后时间大于右区间 \(mid+1 \sim r\) 时刻的起始点,则右区间 \(mid+1 \sim r\) 时刻内所有骑士拜访均要向后推迟,即 tree[rt].maxx=max(tree[lson(rt)].maxx+tree[rson(rt)].sum,tree[rson(rt)].maxx);

query 函数同理,查询时需要额外记录左区间 \(l \sim mid\) 时刻骑士拜访完的最后时间,对于最终时间时需要取 \(\max\),即 max(tree[rt].maxx,tree[rt].sum+maxxx);。最终答案即为最终时间减去起始拜访时间。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long//本题需要开 long long
#define sort stable_sort
#define endl '\n'
ll t[400000],d[400000],ans=0;
struct SegmentTree
{
ll l,r,sum,maxx;
}tree[5000000];
ll lson(ll x)
{
return x*2;
}
ll rson(ll x)
{
return x*2+1;
}
void pushup(ll rt)
{
tree[rt].sum=tree[lson(rt)].sum+tree[rson(rt)].sum;
tree[rt].maxx=max(tree[lson(rt)].maxx+tree[rson(rt)].sum,tree[rson(rt)].maxx);
}
void build(ll rt,ll l,ll r)
{
tree[rt].l=l;
tree[rt].r=r;
if(l==r)
{
tree[rt].maxx=tree[rt].sum=0;
return;
}
ll mid=(l+r)/2;
build(lson(rt),l,mid);
build(rson(rt),mid+1,r);
pushup(rt);
}
void update(ll rt,ll pos,ll val)
{
if(tree[rt].l==tree[rt].r)
{
tree[rt].sum=val;
tree[rt].maxx=tree[rt].l+val;
return;
}
else
{
ll mid=(tree[rt].l+tree[rt].r)/2;
if(pos<=mid)
{
update(lson(rt),pos,val);
}
else
{
update(rson(rt),pos,val);
}
}
pushup(rt);
}
ll query(ll rt,ll l,ll r,ll maxxx)
{
if(l<=tree[rt].l&&tree[rt].r<=r)
{
return max(tree[rt].maxx,tree[rt].sum+maxxx);
}
else
{
ll mid=(tree[rt].l+tree[rt].r)/2;
if(l<=mid)
{
ans=max(ans,query(lson(rt),l,r,maxxx));
}
if(mid<r)
{
ans=max(ans,query(rson(rt),l,r,ans));
}
return ans;
}
}
int main()
{
ll q,n,i,val;
char pd;
cin>>q;
build(1,1,1000000);
for(i=1;i<=q;i++)
{
cin>>pd;
if(pd=='+')
{
cin>>t[i]>>d[i];
update(1,t[i],d[i]);//因为第i位骑士访谈的时间是t[i]到t[i]+d[i]
}
if(pd=='-')
{
cin>>val;
update(1,t[val],0);
}
if(pd=='?')
{
cin>>val;
ans=0;
cout<<max(0ll,query(1,1,val,ans)-val)<<endl;
}
}
return 0;
}

后记

双倍经验:P9801 | CF1089K

P9801 [NERC2018] King Kog’s Reception的更多相关文章

  1. Codeforces 1089K - King Kog's Reception - [线段树][2018-2019 ICPC, NEERC, Northern Eurasia Finals Problem K]

    题目链接:https://codeforces.com/contest/1089/problem/K time limit per test: 2 seconds memory limit per t ...

  2. 2018-2019 ICPC, NEERC, Northern Eurasia Finals (Unrated, Online Mirror, ICPC Rules, Teams Preferred) Solution

    A. Alice the Fan Solved. 题意: 两个人打网球,要求teamA 的得分与其他队伍拉开尽量大 输出合法的方案 思路: $dp[i][j][k][l] 表示 A 赢i局,其他队伍赢 ...

  3. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  4. [bzoj1087][scoi2005]互不侵犯king

    题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 思路 首先,搜索可以放弃,因为这是一 ...

  5. King's Quest —— POJ1904(ZOJ2470)Tarjan缩点

    King's Quest Time Limit: 15000MS Memory Limit: 65536K Case Time Limit: 2000MS Description Once upon ...

  6. 【状压DP】bzoj1087 互不侵犯king

    一.题目 Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上.下.左.右,以及左上.左下.右上.右下八个方向上附近的各一个格子,共8个格子. I ...

  7. ZOJ 2334 Monkey King

    并查集+左偏树.....合并的时候用左偏树,合并结束后吧父结点全部定成树的根节点,保证任意两个猴子都可以通过Find找到最厉害的猴子                       Monkey King ...

  8. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 K. King’s Rout

    K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard inpu ...

  9. BZOJ-1087 互不侵犯King 状压DP+DFS预处理

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][ ...

  10. POJ1364 King

    Description Once, in one kingdom, there was a queen and that queen was expecting a baby. The queen p ...

随机推荐

  1. BTC-实现

    BTC-实现 Transaction-based ledger(比特币是基于交易的账本模式) Account-based ledger(以太坊是基于账户的账本模式) UTXO Unspent Tran ...

  2. Kubernetes 网络:Pod 和 container 的那点猫腻

    1. Kubernetes 网络模型 在 Kubernetes 的网络模型中,最小的网络单位是 Pod.Pod 的网络设计原则是 IP-per-Pod,即 Pod 中 container 共享同一套网 ...

  3. 每天学五分钟 Liunx 101 | 存储篇:LVM

    LVM LVM(Logical Volume Manager),逻辑卷管理器.一种高级文件系统管理方式,它可以动态扩展文件系统.   LVM 的示意图如下所示:

  4. 概率图模型 · 概率论基础 | 讲的非常好的 KL 散度博客

    知乎博客链接:https://zhuanlan.zhihu.com/p/425693597 感觉讲的非常好,谢谢善良的博主

  5. ClickHouse的WITH-ALIAS是如何实现的

    ClickHouse的WITH-ALIAS是如何实现的 WITH-ALIAS包含相似但不同的两个特性: WITH <表达式> as <别名> WITH <别名> a ...

  6. 08-逻辑仿真工具VCS-mismatch

    逻辑仿真工具VCS mismatch,预计的仿真结果和实际仿真结果不同,寻找原因? 首先考虑代码,,不要让代码跑到工具的盲区中 其次考虑仿真工具的问题 +race -- 将竞争冒险的情况写到文件中 不 ...

  7. 【面试题精讲】如何使用Stream的聚合功能

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 求和(Sum): List<Integer ...

  8. [转帖]坑:jmeter代理服务器录制脚本出现target controller is configured to "use recording Controller" but no such controller exists...

    配置好代理服务器后,运行代理服务器 run 报错: target controller is configured to "use recording Controller" bu ...

  9. Jmeter之二_JSR223取样器,断言等添加失败的解决办法

    Jmeter之二_JSR223取样器,断言等添加失败的解决办法 背景 最近在学习jmeter 但是发现在进行JSR223的相关取样器以及断言处理时出现了错误: java.lang.NoClassDef ...

  10. [转帖]一次 Java 进程 OOM 的排查分析(glibc 篇)

    https://juejin.cn/post/6854573220733911048 遇到了一个 glibc 导致的内存回收问题,查找原因和实验的的过程是比较有意思的,主要会涉及到下面这些: Linu ...