主席树

#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. Python笔记:编码问题

    1. python2的编码: python2中使用的是ASCII码,所以不支持中文,如果要在python2中写入中文编码,需要在文件头编写: #-*- encoding:utf-8 -*- 2. 不同 ...

  2. oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)

    0   前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...

  3. Docker笔记——jdk镜像制作

    openjdk镜像依赖如下: openjdk:8-jdk -> buildpack-deps:jessie-scm -> buildpack-deps:jessie-curl -> ...

  4. 聊一聊Java泛型的擦除

    最近看了<thinking in java>的第十五章泛型,感觉有些东西需要记录下来. 泛型是Java SE5才被引入的概念,现在我的工作中泛型主要使用在集合,这样可以知道set()和ge ...

  5. mysql 增加时间字段

    alter table sign_customer add COLUMN update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE ...

  6. 抢人就完事了——OO第二单元总结

    总结性博客作业 (1)从多线程的协同和同步控制方面,分析和总结自己三次作业的设计策略. (2)基于度量来分析自己的程序结构度量类的属性个数.方法个数.每个方法规模.每个方法的控制分支数目.类总代码规模 ...

  7. idea Tomcat部署时没有update classes and resources

    idea 没有update classes and resources         发现为了方便调试页面,想用idea的update classes and resources找不到了,发现需要把 ...

  8. 【转】How to initialize a two-dimensional array in Python?

    [wrong way:] m=[[element] * numcols] * numrows for example: >>> m=[['a'] *3] * 2>>> ...

  9. python入门(十二):面向对象

    1.场景:玩过游戏.主人公,进入了一个场景,有10个小怪物是一样的.有攻击力,血(100格).如果小怪物有多个数值需要管理,小怪物的血量.小怪物出现在屏幕的地点. 可以使用字典来进行记录: {&quo ...

  10. API权限设计总结

    最近在做API的权限设计这一块,做一次权限设计的总结. 1. 假设我们需要访问的API接口是这样的:http://xxxx.com/openapi/v1/get/user/?key=xxxxx& ...