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 ...
随机推荐
- Python——正则模块
1.re模块是用来操作正则表达式 2.正则表达式——用来字符串匹配的 (1)字符组:[字符组] 例如[0123fdsa456*/-] [0-9] 等同于[0123456789] [a-z] 匹配小写 ...
- git生成ssh公钥方法--远程连接github仓库
先配置全局的用户名和邮箱 $ git config --global user.name "runoob" $ git config --global user.email tes ...
- saltstack运维软件
一.saltstack介绍 1.介绍 SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境. SaltStack是一个服务器基础架构集中化管理 ...
- 【LOJ2542】【PKUWC 2018】随机游走 min-max容斥 树上高斯消元
题目描述 有一棵 \(n\) 个点的树.你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(q\) 次询问,每次询问给定一个集合 \(S\),求如果从 \(x\) 出发一 ...
- centos安装node环境
一.安装wget yum install -y wget 二.下载node最新的安装包 wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linu ...
- 关于JavaScript(脚本语言)
1.typeof运算符:判断一个对象是否是什么类型,返回“” 一.数字类型(Number) 1.javascript不擅长计算,不能用于浮点数的计算.如:var a = 0.2; var b = 0. ...
- 应用调试(四)系统调用SWI
目录 应用调试(四)系统调用SWI 系统调用 SWI代码片段分析 分析sys_write 构造sys_hello 应用程序调用SWI 嵌入汇编语法 测试APP 参考 title: 应用调试(四)系统调 ...
- 金融量化分析【day111】:Matplotib-图标标注
一.图像标注 1.股票 df = pd.read_csv('601318.csv') df.plot() plt.plot([1,3,4,5]) plt.plot([5,8,7,9]) plt.tit ...
- Fiddler--QuickExec
QuickExec在Fiddler中提供了比较快捷的功能服务. 在QuickExec输入框中输入命令,能快速地得到想要的结果. 快捷键:打开Fiddler后,按“Alt+q”,可将光标定位到Quick ...
- crm 数据展示 和分页思想(一)
1. 数据的展示 数据通过ORM查询出来 对象列表 QuerySet 1. 普通的字段 对象.字段名 ——> 数据库中的值 <td>{{ customer.phone }}</ ...