「BalkanOI 2018 Day1」Election
「BalkanOI 2018 Day1」Election
记C为1,T为-1,\(sum[i]\)为\(i\)点的前缀和。
对于询问\([l,r]\),分两步计算答案。
要求所有点的\(sum[i]-sum[l-1] \geq 0\),那么就把一些点拔高,需要删去的点数为\(max(sum[l-1]-sum[i])\),最终得到\(sum^{'}[i]\),记需要删去的点个数为\(ans_1\)。
要求所有点\(sum^{'}[r]-sum^{'}[i] \geq 0\),那么就把一些点降低,需要删去的点数为\(max(sum^{'}[i]-sum^{'}[r])\),而\(sum^{'}[r]=sum[r]+ans_1\),\(sum^{'}[i]=sum[l-1] + sum[i]-min(sum[k])(k \in [l-1,i])\),\(max(sum^{'}[])=max(sum[i]-sum[j] +sum[l-1]) (l-1\leq j<i \leq r)\)。
实际上,上面的所有东西都可以用ST表来维护。
#include<bits/stdc++.h>
#define rep(q,a,b) for(int q=a,q##_end_=b;q<=q##_end_;++q)
#define dep(q,a,b) for(int q=a,q##_end_=b;q>=q##_end_;--q)
#define mem(a,b) memset(a,b,sizeof a )
#define debug(a) cerr<<#a<<' '<<a<<"___"<<endl
using namespace std;
void in(int &r){
static char c;
r=0;
while(c=getchar(),c<48);
do r=(r<<1)+(r<<3)+(c^48);
while(c=getchar(),c>47);
}
const int mn=500005;
char as[mn];
int maxv[19][mn],val[19][mn],minv[19][mn];
int sum[mn],lg[mn],n;
void init(){
int *a=maxv[0],*b=minv[0],*c,*d,*e,*f;
rep(q,1,n)sum[q]=as[q]+sum[q-1],a[q]=sum[q],b[q]=sum[q];
rep(q,2,n)lg[q]=lg[q>>1]+1;
rep(q,1,lg[n]){
a=maxv[q],b=maxv[q-1];
c=minv[q],d=minv[q-1];
e=val[q],f=val[q-1];
int v=1<<q-1;
rep(w,1,n-(1<<q)+1){
a[w]=max(b[w],b[w+v]);
c[w]=min(d[w],d[w+v]);
e[w]=max(max(f[w],f[w+v]),b[w+v]-d[w]);
}
}
}
int bin[mn];
int main(){
freopen("elections.in","r",stdin);
freopen("elections.out","w",stdout);
in(n);
scanf("%s",as+1);
rep(q,1,n)as[q]=as[q]=='C'?1:-1;
init();
rep(q,0,lg[n])bin[1<<q]=q;
int Q,a,b;
in(Q);
rep(q,1,Q){
in(a),in(b);
int Min=sum[a-1],d=b-a+1,vl=0,now=a;
while(d){
int w=bin[d&-d];
vl=max(vl,max(val[w][now],maxv[w][now]-Min));
Min=min(Min,minv[w][now]);
now+=1<<w,d&=d-1;
}
printf("%d\n",vl-(sum[b]-sum[a-1]));
}
return 0;
}
「BalkanOI 2018 Day1」Election的更多相关文章
- 「BalkanOI 2018 Day1」Minmaxtree
「BalkanOI 2018 Day1」Minmaxtree 每个点都有一个最大和最小权值的限制. 然后每一个权值的限制都必须要取到. 每个点显然可以直接让他取到最大或最小权值. 可以想到每个点匹配一 ...
- 「BalkanOI 2018 Day2」Parentrises
「BalkanOI 2018 Day2」Parentrises part1 显然可以直接贪心. 右括号记-1,左括号记1. 默认起始全部绿色,不染色. 策略如下: 从左往右扫,如果右括号个数大于左括号 ...
- LOJ#2351. 「JOI 2018 Final」毒蛇越狱
LOJ#2351. 「JOI 2018 Final」毒蛇越狱 https://loj.ac/problem/2351 分析: 首先有\(2^{|?|}\)的暴力非常好做. 观察到\(min(|1|,| ...
- 【LOJ】#3032. 「JOISC 2019 Day1」馕
LOJ#3032. 「JOISC 2019 Day1」馕 处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把 ...
- 【LOJ】#3031. 「JOISC 2019 Day1」聚会
LOJ#3031. 「JOISC 2019 Day1」聚会 听说随机可过? 我想了很久想了一个不会被卡的做法,建出前\(u - 1\)个点的虚树,然后找第\(u\)个点的插入位置,就是每次找一条最长链 ...
- 【LOJ】#3030. 「JOISC 2019 Day1」考试
LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- ...
- 「JOISC 2014 Day1」巴士走读
「JOISC 2014 Day1」巴士走读 将询问离线下来. 从终点出发到起点. 由于在每个点(除了终点)的时间被过来的边固定,因此如果一个点不被新的边更新,是不会发生变化的. 因此可以按照时间顺序, ...
- 「JOISC 2014 Day1」 历史研究
「JOISC 2014 Day1」 历史研究 Solution 子任务2 暴力,用\(cnt\)记录每种权值出现次数. 子任务3 这不是一个尺取吗... 然后用multiset维护当前的区间,动态加, ...
- [loj 6496]「雅礼集训 2018 Day1」仙人掌
传送门 Description 给出一张 \(n\)个点 \(m\)条边的无向连通图,其中每条边至多属于一个简单环,保证没有自环,可能有重边.你需要为其中每条边定向,其中第 \(i\)个点的出度不能超 ...
随机推荐
- vue路由history模式刷新404问题解决方案
更改router 的base // biz是二级目录,路由文件改成 const router = new VueRouter({ mode: 'history', // base: process.e ...
- 抛砖系列之-MySQL中的数据类型JSON
今天介绍一个MySQL中的数据类型-JSON,相信大家对JSON都不陌生,在日常工作中使用到的频率也很高,话不多说,直接开始. 何谓JSON 看下RFC文档对于JSON的描述 1.基于 JavaScr ...
- Unity3D开发入门教程(二)—— Lua入门
五邑隐侠,本名关健昌,12年游戏生涯. 本教程以 Unity 3D + VS Code + C# + tolua 为例. 如果你还没有编程基础,建议你先学习一些编程基础.本文不是完全菜鸟教程,主要针对 ...
- Python_issubclass&isinstance方法和types&inspect内置模块
issubclass&isinstance issubclass 用于判断一个类是否是一个已知类或是该已知类的子类.注意,该方法只能判断类不能判断实例化对象. class A: pass cl ...
- oracle 之 cursor:创建存储过程批量执行DDL语句
说明:使用此过程可任意执行批量DDL语句,调用DDL查询语句时,注意转义字符,使用 ' 转义! 需求:批量删除以CUR_TEST开头的表,且有日志记录. 环境准备:建几张以CUR_TEST开头测试表. ...
- mongodb用户权限管理的CRUD
https://blog.csdn.net/weixin_34332905/article/details/88759759?utm_medium=distribute.pc_relevant.non ...
- 友善之臂mini2440光盘资料下载FriendlyARM-2440-DVD.7z
这是我目前找到最全面的友善之臂mini2440的光盘资料了,几乎支持mini2440的各种lcd屏幕.另外,Windows平台工具文件夹下还有版本比较新的MiniTools,这是一个非常好用的软件! ...
- 端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手四次挥手,滑动窗口(整理转发)
网上查了一下端口状态的资料,我下面总结了一下,自己学习学习: TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死 ...
- nmap高级用法
nmap在信息收集中起着很大的作用,今天我来总结一些nmap常用的一些命令 常用探测主机存活方式 1.-sP:进行ping扫描 打印出对ping扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系 ...
- 《剑指offer》面试题43. 1~n整数中1出现的次数
问题描述 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次. 示例 1: 输入:n = 12 ...