Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
98735 CSYZShenJY Old Driver Tree C++ 通过 100 159 MS 14320 KB 1455 2023-08-16 13:10:25

Tests(20/20):


#include <iostream> #include <stdio.h> #include <set> #define int long long #define auto set<node> :: iterator 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; } int ask(int l,int r,int x) { int ans=0; auto qr=split(r+1),ql=split(l),t=ql; for(;ql!=qr;ql++) if((*ql).v==x) ans+=(*ql).r-(*ql).l+1; ql=t; s.erase(ql,qr),s.insert((node){l,r,x}); 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; s.insert({i, i, a[i]}); } while (m --) { int l, r, c; l = read(), r = read(), c = read(); cout << ask(l, r, c) << '\n'; } return 0; }


测评信息: