Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
1867 18级尹玉文东 【S】T2 区间 C++ 通过 100 178 MS 15752 KB 1225 2020-11-16 16:29:05

Tests(10/10):


#include <bits/stdc++.h> #define int long long #define MAXN 1000008 using namespace std; int n, x; int a[MAXN]; struct Stack{int val, k, pos;} st[MAXN]; int top = 0; int sum, ans; void del() { if(top > 1) { if(st[top].val == st[top - 1].val) { sum -= st[top - 1].pos - st[top - 2].pos; } } top--; } void pus(int val, int k, int pos) { st[++top] = Stack{val, k, pos}; } void upd() { if(top > 1) { if(st[top].val == st[top - 1].val) { sum += st[top - 1].pos - st[top - 2].pos; } } } signed main() { scanf("%d%d", &n, &x); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for(int i = 1; i <= n; i++) { int val = a[i], k = 1, pos = i; while(st[top].val < val && top > 0) del(); while(st[top].val == val && st[top].k == k && top > 0) del(); pus(val, k, pos); upd(); val = x - a[i]; k = 2; pos = i; while(st[top].val < val && top > 0) del(); while(st[top].val == val && st[top].k == k && top > 0) del(); pus(val, k, pos); upd(); ans += sum; } cout << ans << endl; return 0; }


测评信息: