Codeforces 1167E(思路、数据处理)
发布时间:2020-12-14 04:46:14 所属栏目:大数据 来源:网络整理
导读:思路 不难想到枚举 (l) ,那如何高效求出最小的 (r) ?这样答案加上 (x-r+1) 即可。 如果 (l) 并没在序列里出现……没啥想法;如果 (l) 是序列里的数,我们可以做的事情是记下每个数出现的每个pos。观察可以发现如果某数小于 (l) 且在序列里出现
思路
const int maxn = 1e6 + 5; int n,x,a[maxn],premax[maxn]; vector<int> pos[maxn]; ll ans; int main() { read(n),read(x); rep(i,1,n) { read(a[i]); pos[a[i]].push_back(i); premax[i] = max(a[i],premax[i - 1]); } int p,t = n + 1; for (int i = x; i; i--) { if (pos[i].size()) { if (t < pos[i].back()) break; t = pos[i][0]; } p = i; } t = -1; rep(l,x) { int r = max(l,p - 1); if (t > 0) r = max(r,premax[t]); ans += x - r + 1; if (pos[l].size()) { if (t > pos[l][0]) break; t = pos[l].back(); } } writeln(ans); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |