zoukankan      html  css  js  c++  java
  • [ARC115E]LEQ and NEQ

    CLI.[ARC115E]LEQ and NEQ

    \(f_{i,j}\) 表示位置 \(i\)\(j\) 的方案数。则 \(f_{i,j}=\Big(\sum\limits_{k}f_{i-1,k}\Big)-f_{i-1,k}\)。于是我们便考虑线段树优化,只需要实现四种操作:整体求和,整体翻转,整体加,后缀赋零。可以直接用带乘法和加法 tag 的线段树轻松解决。

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

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int mod=998244353;
    int n,m,a[500100];
    vector<int>v;
    #define lson x<<1
    #define rson x<<1|1
    #define mid ((l+r)>>1)
    #define X x,l,r
    #define LSON lson,l,mid
    #define RSON rson,mid+1,r
    struct SegTree{int mul,add,sum;}seg[2001000];
    void ADD(int x,int l,int r,int y){(seg[x].add+=y)%=mod,(seg[x].sum+=1ll*(v[r]-v[l-1])*y%mod)%=mod;}
    void MUL(int x,int y){seg[x].mul=1ll*seg[x].mul*y%mod,seg[x].add=1ll*seg[x].add*y%mod,seg[x].sum=1ll*seg[x].sum*y%mod;}
    void pushdown(int x,int l,int r){MUL(lson,seg[x].mul),MUL(rson,seg[x].mul),seg[x].mul=1;ADD(LSON,seg[x].add),ADD(RSON,seg[x].add),seg[x].add=0;}
    void pushup(int x){seg[x].sum=(seg[lson].sum+seg[rson].sum)%mod;}
    void build(int x,int l,int r){seg[x].mul=1,seg[x].add=0,seg[x].sum=(v[r]-v[l-1])%mod;if(l!=r)build(LSON),build(RSON);}
    void add(int x,int l,int r,int L,int R,int val){if(l>R||r<L)return;if(L<=l&&r<=R)ADD(X,val);else pushdown(X),add(LSON,L,R,val),add(RSON,L,R,val),pushup(x);}
    void mul(int x,int l,int r,int L,int R,int val){if(l>R||r<L)return;if(L<=l&&r<=R)MUL(x,val);else pushdown(X),mul(LSON,L,R,val),mul(RSON,L,R,val),pushup(x);}
    int main(){
    	scanf("%d",&n),v.push_back(0);
    	for(int i=1;i<=n;i++)scanf("%d",&a[i]),v.push_back(a[i]);
    	sort(v.begin(),v.end()),v.resize(unique(v.begin(),v.end())-v.begin()),m=v.size()-1;
    	for(int i=1;i<=n;i++)a[i]=lower_bound(v.begin(),v.end(),a[i])-v.begin();
    	build(1,1,m),mul(1,1,m,a[1]+1,m,0);
    	for(int i=2,sum;i<=n;i++)sum=seg[1].sum,mul(1,1,m,1,m,mod-1),add(1,1,m,1,m,sum),mul(1,1,m,a[i]+1,m,0);
    	printf("%d\n",seg[1].sum);
    	return 0;
    }
    

  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/Troverld/p/14601757.html
Copyright © 2011-2022 走看看