2019 ICPC 南昌网络赛 - Max answer (区间和,区间最值)

?? ????

题意:价值 = 区间和 × 区间最小值,求数组的子区间的最大价值

(1)区间和---->前缀和

(2)O(n^2) 枚举区间 ---> O( n ) 枚举元素,根据当前元素查询相应区间和

对每个元素,维护他作为最小值的左右端点,枚举数组中的元素,该元素大于0为例,查找( i , r [ i ] )的前缀和最大值,( l [ i ] - 1 , i - 1 )的前缀和最小值,注意这里 l [ i ] -1 可能会小于1 ,ST表应从0开始维护

丧心病狂的压行QWQ

ll a[MAXN], l[MAXN], r[MAXN];
ll sum[MAXN], mxv[MAXN][23], mnv[MAXN][23];
ll quemx(int l, int r)
{
    int k = log2(r - l + 1);
    return max(mxv[l][k], mxv[r - (1 << k) + 1][k]);
}
ll quemn(int l, int r)
{
    int k = log2(r - l + 1);
    return min(mnv[l][k], mnv[r - (1 << k) + 1][k]);
}
signed main()
{
    int n; cin >> n;
    rpp(i, n) cin >> a[i], l[i] = r[i] = i, sum[i] = sum[i - 1] + a[i], mxv[i][0] = mnv[i][0] = sum[i];

    for(int i=1;i<=n;++i) while(l[i]>1&&a[i]<=a[l[i]-1]) l[i]=l[l[i]-1];
    for(int i=n;i>=1;--i) while(r[i]<n&&a[i]<=a[r[i]+1]) r[i]=r[r[i]+1];

    for (int j = 1; (1 << j) - 1 <= n; ++j)
        for (int i = 0; i + (1 << j) -1 <= n; ++i)
        {
            mxv[i][j] = max(mxv[i][j - 1], mxv[i + (1 << (j - 1))][j - 1]);
            mnv[i][j] = min(mnv[i][j - 1], mnv[i + (1 << (j - 1))][j - 1]);
        }

    ll ans = -1e17;
    rpp(i, n)
    {
        if (a[i] > 0) ans = max(ans, a[i] * (quemx(i, r[i]) - quemn(l[i] - 1, i - 1)));
        else if (a[i] < 0) ans = max(ans, a[i] * (quemn(i, r[i]) - quemx(l[i] - 1, i - 1)));
        else if (a[i] == 0) ans = max(ans, 0ll);
    }
    cout << ans << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/Herlo/p/12205259.html

时间: 2024-07-31 11:04:13

2019 ICPC 南昌网络赛 - Max answer (区间和,区间最值)的相关文章

2019 ICPC 南昌网络赛

2019 ICPC 南昌网络赛 比赛时间:2019.9.8 比赛链接:The 2019 Asia Nanchang First Round Online Programming Contest 总结 // 史上排名最高一次,开场不到两小时队友各A一题加水题共四题,排名瞬间升至三四十名 // 然后后三小时就自闭了,一题都没有突破...最后排名211 hhhh ? ? B. Fire-Fighting Hero 题意 队友做的,待补. ? AC代码 #include<cstdio> #includ

2019 ICPC 南昌网络赛 - Subsequence (子串判断,预处理,超时)

?? ?? ?? 题意:一个字符串s,t个字符串p,判断p是不是s的子序列 预处理出对于字符串s,每个位置i之后第一个字母x的位置,匹配子序列的时候就相当于在母串上往后跳,如果跳到母串末尾,子序列还没有结束,匹配失败. 然而!超时了QAQ,只能过八组样例,网上也只能找到过九组的,,,希望有哪位大神路过指点一下了 int tag[33],nxt[MAXN][30]; char s[MAXN],p[MAXN]; void init() { int n=strlen(s); for(int j=0;j

2019年ICPC南昌网络赛 J. Distance on the tree 树链剖分+主席树

边权转点权,每次遍历到下一个点,把走个这条边的权值加入主席树中即可. #include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> using namespace std; const int maxx = 2e5+10; struct node{ int l,r,cnt; }tree[maxx*40]; int head[maxx],rk[maxx],siz[maxx

2019 上半年 南昌网络赛

B.Fire-Fighting Hero 图论题-单源最短路径:添加一个顶点,连接各个救火团队所在的救火点,路径长度均设为 0,设该顶点为源,即变成了单源最短路径问题.使用两次Dijkstra算法可求出两个最短路径 的最大值.比较时将救火团队的乘以C进行比较可避免分数操作. #include<iostream> #include<string.h> #include<algorithm> #include<math.h> #define INF 0x3f3f

2019 ICPC上海网络赛 G. Substring 哈希+尺取法+unordered_map

题目链接:https://nanti.jisuanke.com/t/41415 赛后补题. 参考博客:https://blog.csdn.net/bjfu170203101/article/details/100889468 题意:给出一个主串(假设长度为m),再给出n个模式串,对于每一个模式串,如果在主串中有一个子串,它的第一个字符和最后一个字符分别与这个模式串的开头字符和结尾字符相同,并且每一种字符出现的次数相同,那么就把这个模式串和这个子串看成是相同的,认为模式串在主串中出现过一次,比如模

ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval

ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval 题目大意:给一个长度为n,值域为[1, n]的序列{a},要求支持m次操作: 单点修改 1 pos val 询问子区间中某个值域的数的个数,连续的相同数字只记为一个.(即统计数字段的个数) 2 L R x y 数据范围: 1 ≤ n,m ≤ 2×10^5 1 ≤ a[i] ≤ n 解题思路: 连续重复的数字只记一次.所以考虑将每个数字段除第一个出现外的数字都删去(记为0).在读入操作的时候暴力模拟,同时维护

2018 ICPC 徐州网络赛

2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution 将环变成链,设\(f[i][0\)~\(2]\),分别表示与第一个数相同,与第一个数不同,与第一个数相同,与第一个数的反相同.然后\(dp\)即可. 时间复杂度:\(O(n)\) B. BE, GE or NE solution 根据题目描述\(dp\)即可. 时间复杂度:\(O(nm)\) C.

2019 ICPC南昌邀请赛比赛过程及题解

解题过程 中午吃饭比较晚,到机房lfw开始发各队的账号密码,byf开始读D题,shl电脑卡的要死,启动中...然后听到谁说A题过了好多,然后shl让blf读A题,A题blf一下就A了.然后lfw读完M题(shl的电脑终于打开了,然后输入密码,密码错误...自闭),说AC 自动机板题,然后找板子,,,突然发现自己读错题目.后来不知道怎么A的.shl copy了一遍密码终于登上账号.然后lfw一个人用单调栈A掉了I题:byf 秒了H题: shl和byf读j题,读完吧题意告诉lfw,lfw说水题,然后

2019 南昌网络赛icpc I题 cdq分治或分块

题意:给你一个数组,然后每次有两种操作,操作一是修改数组里的数,操作二是查询区间[ l , r ] 里有多少个子区间满足以下条件:1.子区间内的数全部相同.2.子区间内的数在x到y之间.3.子区间得是不能延伸的. 题目链接:https://nanti.jisuanke.com/t/41356 题解:首先转化问题,设 b[ i ] = a[i]==a[i-1] ? 0 : a[i],然后问题就变成了问询区间内有多少个x到y之间的数.(注意左端点特判)这不就是主席树....带修改...好,树状数组加