E. Alice and the Unfair Game(推导线段树)
题:https://codeforces.com/contest/1236/problem/E
粗自:https://www.cnblogs.com/YSFAC/p/11715522.html
#include<bits/stdc++.h>
using namespace std;
#define lson root<<1,l,midd
#define rson root<<1|1,midd+1,r
typedef long long ll;
const int M=1e5+;
ll a[M],tree[M<<],lz[M<<];
ll L[M],R[M];
void build(ll root,ll l,ll r){
if(l==r){
tree[root]=l;
return ;
}
int midd=(l+r)>>;
build(lson);
build(rson);
}
ll query(ll pos,ll root,ll l,ll r){
if(l==r)
return tree[root]+lz[root];
ll midd=(l+r)>>;
if(pos<=midd)
return query(pos,lson)+lz[root];
else
return query(pos,rson)+lz[root];
}
void add(int L,int R,int c,int root,int l,int r){
if(L<=l&&r<=R){
lz[root]+=c;
return ;
}
int midd=(l+r)>>;
if(L<=midd)
add(L,R,c,lson);
if(R>midd)
add(L,R,c,rson);
}
int main(){
ll n,m;
scanf("%I64d%I64d",&n,&m);
for(int i=;i<=m;i++)
scanf("%I64d",&a[i]);
if(n==)
return cout<<"",;
//计算向右最多能走的距离
build(,,n);
for(int i=;i<=m;i++){
ll l=,r=n;
ll qul=,qur=;
while(l<=r){
ll midd=(l+r)>>;
if(query(midd,,,n)<a[i]-i)
qul=midd,l=midd+;
else
r=midd-;
}
qul++,l=,r=n;
while(l<=r){
ll midd=(l+r)>>;
if(query(midd,,,n)<=a[i]-i)
qur=midd,l=midd+;
else
r=midd-;
}
if(qul<=qur)
add(qul,qur,-,,,n);
}
for(int i=;i<=n;i++)
R[i]=min(query(i,,,n)+m+,n);
memset(tree,,sizeof(tree));
memset(lz,,sizeof(lz));
//计算向左最多能走的距离
build(,,n);
for(int i=;i<=m;i++){
ll l=,r=n;
ll qul=,qur=;
while(l<=r){
ll midd=(l+r)>>;
if(query(midd,,,n)<a[i]+i)
qul=midd,l=midd+;
else
r=midd-;
}
qul++,l=,r=n;
while(l<=r){
ll midd=(l+r)>>;
if(query(midd,,,n)<=a[i]+i)
qur=midd,l=midd+;
else
r=midd-;
}
if(qul<=qur)
add(qul,qur,,,,n);
}
for(int i=;i<=n;i++)
L[i]=max(query(i,,,n)-m-,1ll);
ll ans=;
for(int i=;i<=n;i++)
ans+=R[i]-L[i]+;
printf("%I64d",ans);
}
E. Alice and the Unfair Game(推导线段树)的更多相关文章
- 线段树(区间树)之区间染色和4n推导过程
前言 线段树(区间树)是什么呢?有了二叉树.二分搜索树,线段树又是干什么的呢?最经典的线段树问题:区间染色:正如它的名字而言,主要解决区间的问题 一.线段树说明 1.什么是线段树? 线段树首先是二叉树 ...
- 【推导】【线段树】hdu5929 Basic Data Structure
题意: 维护一个栈,支持以下操作: 从当前栈顶加入一个0或者1: 从当前栈顶弹掉一个数: 将栈顶指针和栈底指针交换: 询问a[top] nand a[top-1] nand ... nand a[bo ...
- [cf 1236 E] Alice and the Unfair Game
题意: 给定一个长度为m的序列$A$,你有一个长度为n的棋盘,可以任选一个位置x作为起点. 在时刻$[1,m+1]$你可以向左或向右移动一格. 设时刻i你移动后所在的位置为$B_i$,你需要满足对于任 ...
- HDU 5558 Alice's Classified Message(后缀数组+二分+rmq(+线段树?))
题意 大概就是给你一个串,对于每个\(i\),在\([1,i-1]\)中找到一个\(j\),使得\(lcp(i,j)\)最长,若有多个最大\(j\)选最小,求\(j\)和这个\(lcp\)长度 思路 ...
- CH Round #52 还教室[线段树 方差]
还教室 CH Round #52 - Thinking Bear #1 (NOIP模拟赛) [引子]还记得 NOIP 2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年过去了,曾经借教 ...
- 【BZOJ-4515】游戏 李超线段树 + 树链剖分 + 半平面交
4515: [Sdoi2016]游戏 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 304 Solved: 129[Submit][Status][ ...
- SPOJ COT3 Combat on a tree(Trie树、线段树的合并)
题目链接:http://www.spoj.com/problems/COT3/ Alice and Bob are playing a game on a tree of n nodes.Each n ...
- HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
Vases and Flowers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others ...
- 数据结构(树链剖分,线段树):SDOI 2016 游戏
4515: [Sdoi2016]游戏 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 351 Solved: 157[Submit][Status][ ...
随机推荐
- ansible 文本多行替换实例
将<level='info'> 等全部替换为<level='ERROR'> - name: Before Ansible 2.3, option 'dest', 'destfi ...
- Ubuntu 不插优盘无法启动
ubuntu安装成功后只能通过优盘启动 不插优盘就无法启动 启动后拔掉优盘没问题 难道动过优盘安装的 2013-06-16 20:01 提问者悬赏:5分 | 理电池 | 分类:电脑外接设备 | 浏览2 ...
- java基础二 分支循环
分支循环: if... if...else... if...else if... if...else if...else... switch...case...defau ...
- CPU压力测试--限制到指定范围
作用:增加CPU使用率到指定范围 1.书写shell脚本增加CPU压力 #! /bin/bash # filename cputest.sh endless_loop() { echo -ne &qu ...
- 1.4CAD2017绘图基础
1.新建(ctrl+n) 命令:new 回车——默认样板(acadiso.dwt) 2.打开(ctr+o) 3.保存(ctrl+S) 4.鼠标的应用: 左键:点击拖选等: 中间滚轮:a.滚动,放大缩小 ...
- Thread.sleep 与Thread.currentThread.sleep 相同
package com.citi.tm.api.trade.mongo; public class ThreadTest { public static void main(String[] args ...
- 使用GitHub+Hexo搭建个人博客
title: CozyMo date: 2019-12-28 16:01:29 tags: 书写 前言:搭建博客要自己打代码吗? 开始动手:搭建博客的步骤 个性化:更换主题!! 写博客:初识 mark ...
- 24.docker 部署 wordPress
1. 拉取远程 mysql 和 wordpress 镜像 并 启动起来 使用 docker pull mysql:5.7.27 docker pull wordpress 2. 创建mysql 的 c ...
- CI项目设计Redis队列
项目开发过程中需要设计提供可平衡的处理多个用户请求的队列. 需求: 当用户登录后,查看系统中已经登录的管理员队列,然后查看后台管理员的处理能力,如果已经不能处理新的请求,则把该管理员从处理队列中删除, ...
- Channels(纪念一下卡我心态的一道题)
链接:https://ac.nowcoder.com/acm/contest/3947/C来源:牛客网 题目描述 Nancy喜欢学习,也喜欢看电视. 为了想了解她能看多长时间的节目,不妨假设节目从时刻 ...