Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
98617 CSYZShenJY Old Driver Tree C++ 编译错误 0 0 MS 0 KB 1654 2023-08-16 12:08:49

Tests(0/0):


#include <iostream> #include <stdio.h> #include <set> #define int long long using namespace std; const int N = 2e5 + 5; int n, m, a[N]; struct node { int l, r; mutable int v; bool operator < (const node &X) const { return l < X.l; } }; set<node> s; auto split(int pos) { if (pos > n) { return s.end(); } auto it = --s.upper_bound((node){pos, 0, 0}); if (it->l == pos) { return it; } int l = it->l, r = it->r, v = it->v; s.erase(it); s.insert((node){l, pos - 1, v}); return s.insert((node){pos, r, v}).first; } void assign(int l, int r, int v) { auto itr = split(r + 1), itl = split(l); s.erase(itl, itr); s.insert((node){l, r, v}); } int query(int l, int r, int x) { int ans = 0; auto qr = split(r + 1), ql = split(l); for (; ql != qr; ++ ql) { if ((*ql).v == x) { ans += (*ql).r - (*ql).l + 1; } } return ans; } int read() { char c = getchar(); int sum = 0, f = 1; while (c < '0' || c > '9') { if (c == '-') { f = -1; } c = getchar(); } while (c >= '0' && c <= '9') { sum = (sum << 1) + (sum << 3) + (c ^ 48); c = getchar(); } return sum * f; } signed main() { n = read(), m = read(); for (int i = 1; i <= n; ++ i) { a[i] = read(); } for (int i = 1; i <= n; ++ i) { int j = 0; for (j = i; j <= n && a[j] == a[i]; ++ j); -- j; s.insert({i, j, a[i]}); } while (m --) { int l, r, c; l = read(), r = read(), c = read(); int t = query(l, r, c); cout << t << '\n'; assign(l, r, c); } return 0; }


测评信息: