codeforces 493 div1 e
题解:
和这件zhcs的那题有点像
第一种做法是考虑i,i+1之间的贡献
这样子就是矩形加减然后求矩形最小值个数
另一种做法是我们从左向右维护mx-nx-r+l
跟之前那题一样我们知道这个的最小值为0
另外我们只需要从右向左维护一个单调队列,这样区间取min/max(每个数插入删除一次)
就可以变成分段区间+/-操作了
然后这样就变成区间+/-然后查询历史为0的个数
其实这等价于上一种+扫描线
之后这个地方非常套路。。刚开始并没有理解
首先每个点肯定要维护最小值以及最小值个数
我们对每个点再维护一个时间标记,表示这个点是0的时间
注意我们不能去记录这个时间节点是多少
因为这样标记无法合并,我们在区间修改了一个节点后,我们不能即时的对子区间进行修改
然后下一个标记打下来就出错了
我们去记录每个点为0的时间,并且在父亲方向上可以打增加时间的标记
如何在增加了标记之后下传呢
我们考虑这个点以上的标记影响的都是这整个区间
这个区间之前最小值为0的位置,现在也一定是最小值
所以我们判一下它和父亲最小值是否相同就可以了
代码:
#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
#define ll long long
#define mep(x,y) memcpy(x,y,sizeof(y))
#define mid ((h+t)>>1)
namespace IO{
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T>void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
char sr[<<],z[]; int Z,C=-;
template<class T>void wer(T x)
{
if (x<) sr[++C]='-',x=-x;
while (z[++Z]=x%+,x/=);
while (sr[++C]=z[Z],--Z);
}
IL void wer1() { sr[++C]=' ';}
IL void wer2() { sr[++C]='\n';}
template<class T>IL void maxa(T &x,T y) { if (x<y) x=y;}
template<class T>IL void mina(T &x,T y) { if (x>y) x=y;}
template<class T>IL T MAX(T x,T y) {return x>y?x:y;}
template<class T>IL T MIN(T x,T y) {return x<y?x:y;}
};
using namespace IO;
const int N=1.5e5;
int v[N],q,n,pos[N],cnt,p[N];
struct re{
int a,b,c,d;
}a[N*],b[N*];
ll ans[N*];
void change(int x1,int x2,int y1,int y2,int k)
{
b[++cnt]=(re){x1,y1,y2,k};
b[++cnt]=(re){x2+,y1,y2,-k};
}
const int N1=N*;
struct sgt{
ll now[N1];
int tim[N1],num[N1],v[N1],lazy[N1];
void build(int x,int h,int t)
{
num[x]=(t-h+);
if (h==t) return;
build(x*,h,mid); build(x*+,mid+,t);
}
IL void down(int x)
{
if (lazy[x])
{
lazy[x*]+=lazy[x]; lazy[x*+]+=lazy[x];
v[x*]+=lazy[x]; v[x*+]+=lazy[x];
lazy[x]=;
}
if (tim[x])
{
if (v[x*]==v[x])
{
now[x*]+=1ll*tim[x]*num[x*];
tim[x*]+=tim[x];
}
if (v[x*+]==v[x])
{
now[x*+]+=1ll*tim[x]*num[x*+];
tim[x*+]+=tim[x];
}
tim[x]=;
}
}
IL void updata(int x)
{
now[x]=now[x*]+now[x*+];
v[x]=MIN(v[x*],v[x*+]);
num[x]=;
if (v[x]==v[x*]) num[x]+=num[x*];
if (v[x]==v[x*+]) num[x]+=num[x*+];
}
void change(int x,int h,int t,int h1,int t1,int k)
{
if (h1<=h&&t<=t1)
{
v[x]+=k; lazy[x]+=k; return;
}
down(x);
if (h1<=mid) change(x*,h,mid,h1,t1,k);
if (mid<t1) change(x*+,mid+,t,h1,t1,k);
updata(x);
}
ll query(int x,int h,int t,int h1,int t1)
{
if (h1<=h&&t<=t1) return(now[x]);
down(x);
ll ans=;
if (h1<=mid) ans+=query(x*,h,mid,h1,t1);
if (mid<t1) ans+=query(x*+,mid+,t,h1,t1);
return ans;
}
}S;
bool cmp(re x,re y)
{
return x.a<y.a;
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
read(n);
rep(i,,n) read(v[i]),pos[v[i]]=i;
rep(i,,n-)
{
change(,i,i+,n,);
change(i+,n,,i,);
int x1=pos[i],x2=pos[i+];
if (x1>x2) swap(x1,x2);
change(,x1,x2,n,-);
change(x2,n,,x1,-);
}
read(q);
int q1=q*;
rep(i,,q)
{
int x,y;
read(x); read(y);
a[i*-]=(re){y,y,i*-};
a[i*-]=(re){x-,y,i*-};
a[i*-]=(re){y,x-,i*-};
a[i*]=(re){x-,x-,i*};
p[i]=y-x+;
}
int now=,lst=;
S.build(,,n);
sort(a+,a+q1+,cmp);
sort(b+,b+cnt+,cmp);
rep(i,,q1)
{
while(now<=cnt&&b[now].a<=a[i].a)
{
S.tim[]+=b[now].a-lst; S.now[]+=1ll*(b[now].a-lst)*S.num[];
lst=b[now].a;
S.change(,,n,b[now].b,b[now].c,b[now].d);
now++;
}
S.tim[]+=a[i].a+-lst; S.now[]+=1ll*(a[i].a+-lst)*S.num[];
lst=a[i].a+;
if (a[i].b) ans[a[i].c]=S.query(,,n,,a[i].b);
}
rep(i,,q)
wer((ans[i*-]-ans[i*-]-ans[i*-]+ans[i*]-p[i])/+p[i]),wer2();
fwrite(sr,,C+,stdout);
return ;
}
codeforces 493 div1 e的更多相关文章
- codeforces 407 div1 B题(Weird journey)
codeforces 407 div1 B题(Weird journey) 传送门 题意: 给出一张图,n个点m条路径,一条好的路径定义为只有2条路径经过1次,m-2条路径经过2次,图中存在自环.问满 ...
- codeforces 407 div1 A题(Functions again)
codeforces 407 div1 A题(Functions again) Something happened in Uzhlyandia again... There are riots on ...
- Codeforces 493 E.Devu and Birthday Celebration
\(>Codeforces \space 493\ E.Devu\ and\ Birthday\ Celebration<\) 题目大意 : 有 \(q\) 组询问,每次有 \(n\) 小 ...
- codeforces #305 div1 done
总算搞定了这一场比赛的题目,感觉收获蛮大 其中A,B,C都能通过自己的思考解决掉 D题思路好神,E题仔细想想也能想出来 以后坚持每两天或者一天做一场CF的div1的全套题目 除非有实在无法做出来的题目 ...
- Codeforces #254 div1 B. DZY Loves FFT 暴力乱搞
B. DZY Loves FFT 题目连接: http://codeforces.com/contest/444/problem/B Description DZY loves Fast Fourie ...
- codeforces #313 div1 E
首先我们要注意到一个事情 如果一个灯塔向左覆盖,那么比他小的某个灯塔如果向左覆盖的端点大于当前塔向左覆盖的端点,他一定向右覆盖 对于当前灯塔向右覆盖也是同理 那么我们只需要记录当前覆盖到的端点就可以完 ...
- codeforces #313 div1 D
好神的题目! 首先我们运用pick定理A=S-B/2+1将要求的东西转化掉 之后分离变量,我们变成了求选取凸包面积的期望和求选取凸包在边界上的点的期望 我们先考虑求选取凸包面积的期望 如何计算凸多边形 ...
- codeforces #313 div1 C
同BZOJ 3782 上学路线 QAQ 还比那个简单一点 把坐标(1,1)-(n,m)平移成(0,0)-(n-1,m-1) 设dp[i]表示从(1,1)出发第一次经过障碍且到达第i个障碍的方案数 首先 ...
- codeforces #313 div1 B
模拟判定就可以了 判定字符串是否相等用hash来判断 QAQ 值得一提的是一开始我交的时候T了 结果我将递归的顺序调整了一下就A了 (并不知道为什么 #include<cstdio> #i ...
随机推荐
- [翻译] .NET Core 2.1 发布
原文: Announcing .NET Core 2.1 我们很高兴可以发布 .NET Core 2.1.这次更新包括对性能的改进,对运行时和工具的改进.还包含一种以 NuGet 包的形式部署工具的新 ...
- linux服务端日志中截取自己所需要的部分
近期开发一个图片处理的业务,涉及base64字符串解析的问题,为方便与友商间接口调试,日志中保存Base64.日,想想就肝儿疼,记录下来容易,取的时候难.为准确提取,配合两条命令即可. 1.获取日志所 ...
- Vivado寄存器初始值问题
前言 本复位只针对Vivado中的寄存器复位. 什么时候需要复位?到底要不要复位?怎么复位?复位有什么卵用? 该复位的寄存器需要复位,复位使得寄存器恢复初始值,有的寄存器并不需要复位(数据流路径上). ...
- [CTSC2008]网络管理 [整体二分]
题面 bzoj luogu 所有事件按时间排序 按值划分下放 把每一个修改 改成一个删除一个插入 对于一个查询 直接查这个段区间有多少合法点 如果查询值大于等于目标值 进入左区间 如果一个查询无解 那 ...
- 【JVM】Java内存模型
原文:多线程之Java内存模型(JMM)(一) 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per S ...
- Java【第五篇】基本语法之--数组
数组概述 数组是多个相同类型数据的组合,实现对这些数据的统一管理数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量数组中的元素可以是任何数据类型,包括基本类型和引 ...
- MongoDB 高可用集群副本集+分片搭建
MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...
- 在CentOS 上搭建nginx来部署静态页面网站
在centOs 上搭建nginx来部署静态页面网站 一.部署服务器环境 nginx:轻量级.高性能的HTTP及反向代理服务器,占用内存少,并发能力强,相比老牌的apache作为web服务器,性能更加卓 ...
- 深入剖析Kubernetes学习笔记:预习篇(01-04)
01 初出茅庐 1.PaaS 项目被大家接纳的一个主要原因? 就是它提供了一种名叫"应用托管". 2.像 Cloud Foundry 这样的 PaaS 项目,最核心的组件是? 一套 ...
- array_slice()函数造成的一次sql注入
HDwiki6.0 sql注入 下载连接http://kaiyuan.hoodong.com/download/ 漏洞出现在\control\edition.php的docompare()函数 !de ...