主席树

#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. react基础学习 二——生命周期

    生命周期mount: mounting装载创建 update更新 unmounting卸载 错误捕获 注意点:生命周期函数的 作用,什么之后用 只有类式组件有生命周期,函数式组件没有生命周期 moun ...

  2. Vim常用配置

    mkdir -p ~/.vim/bundle/Vundle.vim git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/V ...

  3. jersey 开启gzip

    @Bean public ResourceConfig resourceConfig() { ResourceConfig resourceConfig = new ResourceConfig(); ...

  4. ETL hive update 之 deltamerge 优化

    full join 横向join ,不能map join 走shuffle row_number() over ( partition by 主键 order by $flag desc) rank ...

  5. centos nginx配置https

    1.获取https证书: 用的阿里的免费证书: 参考:https://blog.csdn.net/chandoudeyuyi/article/details/71246255 2.修改nginx配置文 ...

  6. Kafka(1)--kafka基础知识

    Kafka 的简介: Kafka 是一款分布式消息发布和订阅系统,具有高性能.高吞吐量的特点而被广泛应用与大数据传输场景.它是由 LinkedIn 公司开发,使用 Scala 语言编写,之后成为 Ap ...

  7. 电脑开机出现intel UNDI,PXE-2.1(build 003),是怎么回事?

    restore defaults恢复出厂设置 https://jingyan.baidu.com/article/20b68a88587205796cec6290.html

  8. jsfl 添加代码

    var __name=""; var __author=""; var __book=[]; var newJz=""; for(var d ...

  9. Java爬虫——常用的maven依赖

    java实现爬虫常用的第三方包: httpclient,for http jsoup,for dom rhino,for js jackson,for json pom.xml摘录 <depen ...

  10. python学习 生成随机函数 random模块的用法

    random模块是用于生成随机数 常用函数 函数 含义 random() 生成一个[0,1.0)之间的随机浮点数 uniform(a,b) 生成一个a到b之间的随机浮点数 randint(a,b) 生 ...