HDU-2017 多校训练赛3-1003-Kanade’s sum
来源:互联网 发布:河南统计网络直报平台 编辑:程序博客网 时间:2024/06/02 19:14
ACM模版
描述
题解
我的意中人是个盖世英雄,有一天他会踩着七色的云彩来娶我,我猜中了开头,可是我猜不着这结局……
这个题我也是猜中了开头,却没有猜中结尾……
首先,很明显的一个条件是,人家要求所有子区间的第
然后我就各种想,怎么才能优化这个贡献的查询呢?单调栈肯定不行,暴力,更不行……想来想去,始终无法使程序更优,也就
后来,发现这个题想要优化到
代码
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;typedef long long ll;const int MAXN = 5e5 + 10;template <class T>inline void scan_d(T &ret){ char c; ret = 0; while ((c = getchar()) < '0' || c > '9'); while (c >= '0' && c <= '9') { ret = ret * 10 + (c - '0'), c = getchar(); }}int n, k;int s0, t0;ll ans = 0;int a[MAXN], pos[MAXN];int pre[MAXN], ntp[MAXN];int s[MAXN], t[MAXN];void erase(int x){ int pp = pre[x]; int nn = ntp[x]; if (pre[x]) { ntp[pre[x]] = nn; } if (ntp[x] <= n) { pre[ntp[x]] = pp; } pre[x] = ntp[x] = 0;}void solve(){ for (int i = 1; i <= n; i++) { pre[i] = i - 1; ntp[i] = i + 1; } ans = 0; for (int num = 1; num <= n - k + 1; num++) { int p = pos[num]; s0 = t0 = 0; for (int d = p; d && s0 <= k + 1; d = pre[d]) { s[++s0] = d; } for (int d = p; d != n + 1 && t0 <= k + 1; d = ntp[d]) { t[++t0] = d; } s[++s0] = 0; t[++t0] = n + 1; for (int i = 1; i < s0; i++) { if (k + 1 - i <= t0 - 1 && k + 1 - i >= 1) { ans += (t[k + 1 - i + 1] - t[k + 1 - i]) * 1ll * (s[i] - s[i + 1]) * num; } } erase(p); }}int main(){ int T; scan_d(T); while (T--) { scan_d(n), scan_d(k); for (int i = 1; i <= n; i++) { scan_d(a[i]); pos[a[i]] = i; } solve(); cout << ans << endl; } return 0;}
阅读全文
1 0
- HDU-2017 多校训练赛3-1003-Kanade’s sum
- 2017多校训练Contest3: 1003 Kanade's sum hdu6058
- 【多校训练】hdu 6058 Kanade's sum
- 2017多校训练Contest3: 1004 Kanade's sum hdu6059
- 2017 多校训练第三场 HDU 6058 Kanade's sum
- HDU-2017 多校训练赛3-1004-Kanade's trio
- HDU 6058-Kanade's sum(多校训练第三场->模拟)
- HDU 6059-Kanade's trio(多校训练第三场->01字典树)
- 2017 HDU 6058 多校联合赛 Kanade's sum
- 2017 多校3 1003 Kanade's sum
- Kanade's sum HDU
- hdu-多校训练赛-KazaQ's Socks
- HDU-2017 多校训练赛1-1003-Colorful Tree
- HDU-2017 多校训练赛2-1003-Maximum Sequence
- HDU-2017 多校训练赛4-1003-Counting Divisors
- HDU-2017 多校训练赛6-1003-Inversion
- hdu 多校联赛 Kanade's sum
- HDU 6058 Kanade's sum(多校3)
- c++获取文件夹及子文件夹中文件
- <8/2>集训日记
- Lucene的基本操作
- ACM暑假集训日记 17.8.2
- hdu 1695 莫比乌斯基础题
- HDU-2017 多校训练赛3-1003-Kanade’s sum
- Struts2配置文件优先级
- 查找树中两个节点的最低公共祖先
- 链表的知识点整理
- error: could not find or load main class
- SimpleDateFormat使用详解
- 如何让我们的ExtJs combobox支持模糊匹配
- B. Dima and Text Messages---简单字符串处理
- mysql报错:1130 -host 'localhost' is not allowed to connect to this mysql server