正题

题目链接:https://atcoder.jp/contests/arc115/tasks/arc115_d


题目大意

\(n\)个数字的序列\(x\),第\(x_i\in [1,A_i]\cap Z\)。要求相邻的不同,求方案数。

\(1\leq n\leq 5\times 10^5,1\leq A_i\leq 10^9\)


解题思路

考虑容斥,如果有\(k\)个相邻的相等那么容斥系数就是\((-1)^k\)。那我们把\(n\)分为若干个连续的相同段,然后每一段的容斥系数分开算就好了,这样就是一个可以\(dp\)的式子了。

设\(f_i\)表示以\(i\)结尾的段时的值,那么有转移方程

\[f_i=\sum_{j=0}^{i-1}f_j\times min\{A_k\}(k\in(j,i])\times (-1)^{i-j-1}
\]

这个\(min\{A_k\}\)每次加入一个新的时候会影响一个后缀,用单调栈找到这个后缀,然后把\(f_i\)丢进线段树里。

而那个容斥系数就是每次整个线段树乘上一个\((-1)\),这个丢到外面处理就好了。

时间复杂度\(O(n\log n)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=5e5+10,M=N<<2,P=998244353;
ll n,a[N],q[N],f[N];
ll w[M],lazy[M],v[M];
void Downdata(ll x){
if(!lazy[x])return;
w[x*2]=v[x*2]*lazy[x]%P;
w[x*2+1]=v[x*2+1]*lazy[x]%P;
lazy[x*2]=lazy[x*2+1]=lazy[x];
return;
}
void Change(ll x,ll L,ll R,ll l,ll r,ll c){
if(L==l&&R==r){lazy[x]=c;w[x]=v[x]*c%P;return;}
ll mid=(L+R)>>1;Downdata(x);
if(r<=mid)Change(x*2,L,mid,l,r,c);
else if(l>mid)Change(x*2+1,mid+1,R,l,r,c);
else Change(x*2,L,mid,l,mid,c),Change(x*2+1,mid+1,R,mid+1,r,c);
w[x]=(w[x*2]+w[x*2+1])%P;v[x]=(v[x*2]+v[x*2+1])%P;return;
}
void Insert(ll x,ll L,ll R,ll pos,ll c){
if(L==R){v[x]=c;w[x]=c*lazy[x]%P;return;}
ll mid=(L+R)>>1;Downdata(x);
if(pos<=mid)Insert(x*2,L,mid,pos,c);
else Insert(x*2+1,mid+1,R,pos,c);
w[x]=(w[x*2]+w[x*2+1])%P;v[x]=(v[x*2]+v[x*2+1])%P;return;
}
signed main()
{
scanf("%lld",&n);
ll top=1;Insert(1,1,n,1,P-1);
for(ll i=1;i<=n;i++){
scanf("%lld",&a[i]);
while(top>0&&a[i]<a[q[top]])top--;
Change(1,1,n,q[top]+1,i,a[i]);q[++top]=i;
f[i]=(i&1)?(P-w[1]):w[1];
if(i!=n)Insert(1,1,n,i+1,P-w[1]);
}
printf("%lld\n",f[n]);
return 0;
}

ARC115E-LEQ and NEQ【容斥,dp,线段树】的更多相关文章

  1. HDU 5794 A Simple Chess (容斥+DP+Lucas)

    A Simple Chess 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5794 Description There is a n×m board ...

  2. [CF1086E]Beautiful Matrix(容斥+DP+树状数组)

    给一个n*n的矩阵,保证:(1)每行都是一个排列 (2)每行每个位置和上一行对应位置不同.求这个矩阵在所有合法矩阵中字典序排第几.考虑类似数位DP的做法,枚举第几行开始不卡限制,那么显然之前的行都和题 ...

  3. 【BZOJ3622】已经没有什么好害怕的了 容斥+DP

    [BZOJ3622]已经没有什么好害怕的了 Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output ...

  4. $bzoj2560$ 串珠子 容斥+$dp$

    正解:容斥+$dp$ 解题报告: 传送门$QwQ$ $umm$虽然题目蛮简练的了但还是有点难理解,,,我再抽象一点儿,就说有$n$个点,点$i$和点$j$之间有$a_{i,j}$条无向边可以连,问有多 ...

  5. ZOJ 3349 Special Subsequence 简单DP + 线段树

    同 HDU 2836 只不过改成了求最长子串. DP+线段树单点修改+区间查最值. #include <cstdio> #include <cstring> #include ...

  6. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. cf834D(dp+线段树区间最值,区间更新)

    题目链接: http://codeforces.com/contest/834/problem/D 题意: 每个数字代表一种颜色, 一个区间的美丽度为其中颜色的种数, 给出一个有 n 个元素的数组, ...

  8. Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树)

    Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树) 题目链接 题意 给定一个nm的矩阵,每行取2k的矩阵,求总 ...

  9. AGC 005D.~K Perm Counting(容斥 DP 二分图)

    题目链接 \(Description\) 给定\(n,k\),求 满足对于所有\(i\),\(|a_i-i|\neq k\)的排列的个数. \(2\leq n\leq 2000,\quad 1\leq ...

随机推荐

  1. npm常用命令及其node相关工具汇总

    它是一个事件驱动异步I/O单进程的服务端JS环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 浏览器是JS的前端运行环境. Node.js是JS的后端运行环 ...

  2. leaflet 动态线渲染

    可以采用leaflet插件 leaflet-ant-path ... <script src="js/leaflet-ant-path.js" type="text ...

  3. HttpClient4.3教程 第三章 Http状态管理

    最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...

  4. 关于腾讯云redis 无法外网访问的解决方案

    问题简介: 今天购买了一台腾讯云的redis:如图 可是我没有找到 腾讯云提供的外网地址,我该怎么连接呢?百度了一大堆 全部是 在腾讯云服务器上搭建的Redis实例的解决办法.完全不匹配. 开始解决: ...

  5. 关于 java编程思想第五版 《On Java 8》

    On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! ...

  6. hdu1002 大数相加问题

    这个题对于 几个月前的我简直是噩梦  好在磕磕绊绊终于写出来了 由于自己的问题  还被巨巨嘲讽了 1 1.#include<stdio.h> 2 2.#include<string. ...

  7. roslaunch 启动时修改参数

    启动命令: roslaunch beginner_tutorials turtlemimic.launch arg1:=3.0 查询命令: rosparam get /param1 可以看到param ...

  8. Kickstart部署之HTTP架构

    原文转自:https://www.cnblogs.com/itzgr/p/10029527.html作者:木二 目录 一 准备 1.1 完整架构:Kickstart+DHCP+HTTP+TFTP+PX ...

  9. Linux档案权限篇之一

    一.查看档案的属性 "ls" 第一列为档案的权限: d:代表是目录 -:代表是文件 l:代表是连接文件(相当于windows里面的快捷方式) b:代表块设备(如硬盘) c:代表字符 ...

  10. Mybatis(三)——全局配置文件

    二.properties     三.settings 四.typeAilases 这里不做介绍.