主席树

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define rd read()
using namespace std; const int N = 1e5 + 5; int ls[N], tot, n, m, q;
int a[N], ans;
vector<int> ad[N], reduce[N]; struct que {
int l, r, x;
}b[N]; int read() {
int X = 0, p = 1; char c = getchar();
for (; c > '9' || c < '0'; c = getchar())
if (c == '-') p = -1;
for (; c >= '0' && c <= '9'; c = getchar())
X = X * 10 + c - '0';
return X * p;
} namespace SegT {
int cnt, root[N];
struct node {
int sum, lson, rson;
}p[N * 50];
#define lc(x) p[x].lson
#define rc(x) p[x].rson
#define sum(x) p[x].sum
#define mid ((l + r) >> 1) void modify(int &x, int now, int pos, int d, int l, int r) {
x = ++cnt;
sum(x) = sum(now) + d;
lc(x) = lc(now);
rc(x) = rc(now);
if (l == r) return;
if (pos <= mid) modify(lc(x), lc(now), pos, d, l, mid);
else modify(rc(x), rc(now), pos, d, mid + 1, r);
} int query(int x, int pos, int l, int r) {
if (!x) return 0;
if (r <= pos) return sum(x);
int res = 0;
if (mid <= pos)
return query(lc(x), pos, l, mid) + query(rc(x), pos, mid + 1, r);
else
return query(lc(x), pos, l, mid);
}
}using namespace SegT; int main()
{
n = rd; m = rd; q = rd;
for (int i = 1; i <= n; ++i) a[i] = rd;
for (int i = 1; i <= m; ++i)
b[i].l = rd, b[i].r = rd, b[i].x = rd, ls[++tot] = b[i].x;
sort(ls + 1, ls + 1 + tot);
tot = unique(ls + 1, ls + 1 + tot) - ls - 1;
for (int i = 1; i <= m; ++i) {
int tmp = lower_bound(ls + 1, ls + 1 + tot, b[i].x) - ls;
ad[tmp].push_back(b[i].l);
if (b[i].r < n) reduce[tmp].push_back(b[i].r + 1);
}
for (int i = 1; i <= tot; ++i) {
root[i] = root[i - 1];
for (int j = 0, up = ad[i].size(); j < up; ++j)
modify(root[i], root[i], ad[i][j], 1, 1, n);
for (int j = 0, up = reduce[i].size(); j < up; ++j)
modify(root[i], root[i], reduce[i][j], -1, 1, n);
}
for (int i = 1; i <= n; ++i) {
int tmp = upper_bound(ls + 1, ls + 1 + tot, a[i]) - 1 - ls;
ans += query(root[tmp], i, 1, n);
}
printf("%d\n", ans);
for (int i = 1; i <= q; ++i) {
int u = rd ^ ans, v = rd ^ ans;
int tmp = upper_bound(ls + 1, ls + 1 + tot, a[u]) - 1 - ls;
ans -= query(root[tmp], u, 1, n);
a[u] = v;
tmp = upper_bound(ls + 1, ls + 1 + tot, a[u]) - 1 - ls;
ans += query(root[tmp], u, 1, n);
printf("%d\n", ans);
}
}

BZOJ 2016十连测 D3T3序列的更多相关文章

  1. BZOJ NOI十连测 第二测 T2

    思路:20%可以搜索.. #include<algorithm> #include<cstdio> #include<cmath> #include<cstr ...

  2. BZOJ NOI十连测 第二测 T1

    出题人居然是个哲学家.. 26%的程序,太SB了...本来我的想法也是二分+贪心,但是贪心是个怪怪的SX贪心.. #include<algorithm> #include<cstdi ...

  3. BZOJ NOI十连测 第一测 T1

    思路:首先考虑t=1的情况,t等于1,那么所有位置的颜色相同,我们不用考虑概率的问题,那么,k+d*x在模d下都相等,我们考虑预处理一个数组s[i][j],代表d为i,起始位置为j的等差数列的和,这个 ...

  4. BZOJ NOI十连测 第一测 T2

    思路:看到这题,就感觉是一道很熟悉的题目: http://www.cnblogs.com/qzqzgfy/p/5535821.html 只不过这题的K最多可以到N,而且边权不再只是1,考试的时候yy了 ...

  5. bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树

    [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 93  Solved: 53[Submit][Status][ ...

  6. bzoj 5216: [Lydsy2017省队十连测]公路建设

    5216: [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 66  Solved: 37[Submit][St ...

  7. 提高十连测day3

    提高十连测day3 A 我们可以枚举两个 $ 1 $ 之间的相隔距离,然后计算形如 $ 00100100 \cdots $ 的串在原串中最⻓⼦序列匹配即可,复杂度 $ O(n^2) $ .寻找 $ S ...

  8. ZROI2019 提高十连测

    额 掰手指头一数 特么又是第三年十连测了= = 2017一场没打 那时候好像一场比赛也就100人左右 2018前几场还都好好补了 后来开始放飞自我了 这时候一场有150人还多了 2019想让今年的No ...

  9. Lydsy2017省队十连测

    5215: [Lydsy2017省队十连测]商店购物 可能FFT学傻了,第一反应是前面300*300背包,后面FFT... 实际上前面背包,后面组合数即可.只是这是一道卡常题,需要注意常数.. //A ...

随机推荐

  1. [UnityShader基础]08.UI-Default.shader

    参考链接: https://zhuanlan.zhihu.com/p/32561155 https://blog.csdn.net/WuShangLZ/article/details/80401441 ...

  2. S表示1,L表示2,计算由S和L组成的序列之和为N的组合

    def func(n): def calc_str(s): s = s.strip() if s is not None else "" s = s.upper() result ...

  3. python使用xlrd, xlwt读取excel文件和 写入excel文件

    python 3.6 首先在cmd下执行安装指令 xlre和xlwt : pip  install  xlre    pip install  xlwt #-*- coding: utf8 -*-im ...

  4. AES五种加密模式(CBC、ECB、CTR、OCF、CFB)

    --转载https://www.cnblogs.com/starwolf/p/3365834.html https://www.freebuf.com/column/171939.html 分组密码有 ...

  5. 用es5原生模仿-es6Promise异步处理

    用es5原生模仿-es6Promise异步处理,不过在处理异常的时候有点小bug不是很完美,不过多级then 是没问题的和resolve, rejec  正常调用和异常处理调用是没问题的.本帖属于原创 ...

  6. 沙箱机制(Sandboxie)

    一.沙箱是什么? 沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响. 二.沙箱的应用 (1)搭建测试环境.沙箱的应用只能访问自己的应用访问目录,而不 ...

  7. Spring Boot与Docker部署

    开启Docker远程访问 首先需要开启docker远程访问功能,以便可以进行远程操作. CentOS 6 修改/etc/default/docker文件,重启后生效(service docker re ...

  8. 【原创】qlogic网卡软中断不均衡问题分析

    引子 使用qlogic QL45000网卡测试业务性能,发现cpu软中断分布不均衡,而且很有规律,导致cpu空闲也不是很均衡, 会影响业务稳定性. 设备使用3张网卡Qlogic网卡,配置为4*25G模 ...

  9. mongodb安装使用简单命令

    .window+x,A,管理员进入cmd.cd C:\Program Files\MongoDB\Server\3.4\bin.安装:mongod --dbpath "D:\work\DB\ ...

  10. 导弹拦截问题(DP+贪心)

    1. 拦截导弹(Noip1999) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度. ...