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
AC × 3
AC × 35
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