题: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(推导线段树)的更多相关文章

  1. 线段树(区间树)之区间染色和4n推导过程

    前言 线段树(区间树)是什么呢?有了二叉树.二分搜索树,线段树又是干什么的呢?最经典的线段树问题:区间染色:正如它的名字而言,主要解决区间的问题 一.线段树说明 1.什么是线段树? 线段树首先是二叉树 ...

  2. 【推导】【线段树】hdu5929 Basic Data Structure

    题意: 维护一个栈,支持以下操作: 从当前栈顶加入一个0或者1: 从当前栈顶弹掉一个数: 将栈顶指针和栈底指针交换: 询问a[top] nand a[top-1] nand ... nand a[bo ...

  3. [cf 1236 E] Alice and the Unfair Game

    题意: 给定一个长度为m的序列$A$,你有一个长度为n的棋盘,可以任选一个位置x作为起点. 在时刻$[1,m+1]$你可以向左或向右移动一格. 设时刻i你移动后所在的位置为$B_i$,你需要满足对于任 ...

  4. HDU 5558 Alice's Classified Message(后缀数组+二分+rmq(+线段树?))

    题意 大概就是给你一个串,对于每个\(i\),在\([1,i-1]\)中找到一个\(j\),使得\(lcp(i,j)\)最长,若有多个最大\(j\)选最小,求\(j\)和这个\(lcp\)长度 思路 ...

  5. CH Round #52 还教室[线段树 方差]

    还教室 CH Round #52 - Thinking Bear #1 (NOIP模拟赛) [引子]还记得 NOIP 2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年过去了,曾经借教 ...

  6. 【BZOJ-4515】游戏 李超线段树 + 树链剖分 + 半平面交

    4515: [Sdoi2016]游戏 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 304  Solved: 129[Submit][Status][ ...

  7. 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 ...

  8. 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 ...

  9. 数据结构(树链剖分,线段树):SDOI 2016 游戏

    4515: [Sdoi2016]游戏 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 351  Solved: 157[Submit][Status][ ...

随机推荐

  1. Vue v-bind

    指令作用: 给元素的属性赋值 它是一个 vue 指令,用于绑定 html 属性 写法: 正常写法 <div v-bind:原属性名="变量||"常量""& ...

  2. POJ 1840:Eqs 哈希求解五元方程

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14169   Accepted: 6972 Description ...

  3. 进度1_家庭记账本App

    今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...

  4. maven项目从本地向本地仓库导入jar包

    方法一(推荐): <dependency> <groupId>guagua-commons</groupId> <artifactId>guagua-c ...

  5. 数组分组(DP)

    一个长度为n的数组a,我们可以把它分成任意组,每一组是一段连续的区间. 比如数组1,2,3,4,5可以分成(1,2),(3,4,5)两个组.每个分组都有一个权值,这个权值就是分组里面每个数的乘积对10 ...

  6. 模拟jenkins通过shell给ansible传入变量

    jenkins.sh #!/bin/bash name1='robin h h li' age1='11' declare -A dic dic=( [name1]="${name1}&qu ...

  7. IO读写

    1.read & write read: 把数据从内核缓冲区复制到进程缓冲区. write: 把数据从进程缓冲区复制到内核缓冲区. 上层程序的IO操作.不是物理设备级别的读写,而是缓存的复制. ...

  8. Windows下C extension not loaded for Word2Vec, training will be slow.解决方法

    在网上看了好多个博客,都没有很好解决,最后google.. 大概问题就是gensim库在安装时没有和其他一些包关联起来(可能是由于用pip安装的gensim导致这个问题),所以在用Word2Vec时没 ...

  9. java查看简单GC日志

    测试代码: public class GCtest { public static void main(String[] args) { for (int i = 0; i < 10000; i ...

  10. 手机H5,用Jquery使图片自动填满两栏式排版

    遇上这样的排版,手机的解象度都不同,假如只用CSS3根本就做不出这样的排版:因此要用Jquery. 1. HTML <div class="postImgCenterCrop" ...