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][ ...
随机推荐
- Vue v-bind
指令作用: 给元素的属性赋值 它是一个 vue 指令,用于绑定 html 属性 写法: 正常写法 <div v-bind:原属性名="变量||"常量""& ...
- POJ 1840:Eqs 哈希求解五元方程
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14169 Accepted: 6972 Description ...
- 进度1_家庭记账本App
今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...
- maven项目从本地向本地仓库导入jar包
方法一(推荐): <dependency> <groupId>guagua-commons</groupId> <artifactId>guagua-c ...
- 数组分组(DP)
一个长度为n的数组a,我们可以把它分成任意组,每一组是一段连续的区间. 比如数组1,2,3,4,5可以分成(1,2),(3,4,5)两个组.每个分组都有一个权值,这个权值就是分组里面每个数的乘积对10 ...
- 模拟jenkins通过shell给ansible传入变量
jenkins.sh #!/bin/bash name1='robin h h li' age1='11' declare -A dic dic=( [name1]="${name1}&qu ...
- IO读写
1.read & write read: 把数据从内核缓冲区复制到进程缓冲区. write: 把数据从进程缓冲区复制到内核缓冲区. 上层程序的IO操作.不是物理设备级别的读写,而是缓存的复制. ...
- Windows下C extension not loaded for Word2Vec, training will be slow.解决方法
在网上看了好多个博客,都没有很好解决,最后google.. 大概问题就是gensim库在安装时没有和其他一些包关联起来(可能是由于用pip安装的gensim导致这个问题),所以在用Word2Vec时没 ...
- java查看简单GC日志
测试代码: public class GCtest { public static void main(String[] args) { for (int i = 0; i < 10000; i ...
- 手机H5,用Jquery使图片自动填满两栏式排版
遇上这样的排版,手机的解象度都不同,假如只用CSS3根本就做不出这样的排版:因此要用Jquery. 1. HTML <div class="postImgCenterCrop" ...