Submission #49207240
Source Code Expand
// LUOGU_RID: 142472765
//Author: gsczl71
//Copyright (c) 2023 gsczl71 All rights reserved.
#include<bits/stdc++.h>
#define ll long long
#define i128 __int128
#define ull unsigned long long
#define pii pair<int,int>
#define pll pair<long long, long long>
#define fir first
#define se second
#define endl '\n'
#define debug puts("AK IOI")
#define re register
#define pb push_back
using namespace std;
#define int long long
//const int mod = 1e9+7;
const int mod = 998244353;
const int inf = 0x3f3f3f3f,N = 3e5+5,M = 2e5+5;
const ll linf = 0x3f3f3f3f3f3f3f3f;
int n,a[N],f,g,dp[N],mx[N],mn[N];
stack<int> stmx,stmn;
void solve(){
cin>>n;for(int i=1;i<=n;i++)cin>>a[i];
dp[0]=mx[0]=mn[0]=1;//因为要做乘法
for(int i=1;i<=n;i++){
//对max部分处理
mx[i]=dp[i-1];//长度为1的贡献肯定是ai
while(!stmx.empty()&&a[stmx.top()]<a[i]){//找比ai小的数
int x=stmx.top();stmx.pop();
mx[i]=(mx[i]+mx[x])%mod;//修改累积的和。
f-=mx[x]*a[x]%mod;f=(f%mod+mod)%mod;
}stmx.push(i);
f=((f+mx[i]*a[i])%mod+mod)%mod;//(1)式
//对min部分处理 (跟max同理)
mn[i]=dp[i-1];
while(!stmn.empty()&&a[stmn.top()]>a[i]){//找比ai小的数
int x=stmn.top();stmn.pop();
mn[i]=(mn[i]+mn[x])%mod;
g-=mn[x]*a[x]%mod;g=(g%mod+mod)%mod;
}stmn.push(i);
g=((g+mn[i]*a[i])%mod+mod)%mod;//(2)式
//合算答案。
dp[i]=((f-g)%mod+mod)%mod;//(3)式
}cout<<dp[n];
}
signed main(){
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int T=1;
// cin >> T;
while(T--) solve();
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | G - Divide a Sequence |
| User | Expert_Dream |
| Language | C++ 17 (gcc 12.2) |
| Score | 600 |
| Code Size | 1600 Byte |
| Status | AC |
| Exec Time | 29 ms |
| Memory | 14956 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example0.txt, example1.txt, example2.txt |
| All | 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, example0.txt, example1.txt, example2.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 000.txt | AC | 27 ms | 12736 KiB |
| 001.txt | AC | 28 ms | 12696 KiB |
| 002.txt | AC | 28 ms | 12736 KiB |
| 003.txt | AC | 28 ms | 12816 KiB |
| 004.txt | AC | 28 ms | 12808 KiB |
| 005.txt | AC | 28 ms | 12844 KiB |
| 006.txt | AC | 28 ms | 12696 KiB |
| 007.txt | AC | 27 ms | 12964 KiB |
| 008.txt | AC | 1 ms | 3444 KiB |
| 009.txt | AC | 1 ms | 3504 KiB |
| 010.txt | AC | 24 ms | 11360 KiB |
| 011.txt | AC | 23 ms | 11224 KiB |
| 012.txt | AC | 7 ms | 5592 KiB |
| 013.txt | AC | 3 ms | 4188 KiB |
| 014.txt | AC | 7 ms | 5632 KiB |
| 015.txt | AC | 27 ms | 14904 KiB |
| 016.txt | AC | 28 ms | 13272 KiB |
| 017.txt | AC | 28 ms | 13348 KiB |
| 018.txt | AC | 27 ms | 12940 KiB |
| 019.txt | AC | 28 ms | 12764 KiB |
| 020.txt | AC | 29 ms | 13632 KiB |
| 021.txt | AC | 28 ms | 12816 KiB |
| 022.txt | AC | 27 ms | 14956 KiB |
| 023.txt | AC | 28 ms | 13648 KiB |
| 024.txt | AC | 28 ms | 13640 KiB |
| 025.txt | AC | 28 ms | 12892 KiB |
| 026.txt | AC | 28 ms | 14924 KiB |
| 027.txt | AC | 29 ms | 13656 KiB |
| 028.txt | AC | 28 ms | 13664 KiB |
| 029.txt | AC | 28 ms | 12808 KiB |
| 030.txt | AC | 28 ms | 14880 KiB |
| 031.txt | AC | 28 ms | 13644 KiB |
| example0.txt | AC | 1 ms | 3544 KiB |
| example1.txt | AC | 1 ms | 3452 KiB |
| example2.txt | AC | 1 ms | 3460 KiB |