【bzoj 十连测】[noip2016十连测第三场]Problem C: 序列(静态主席树)
Problem C: [noip2016十连测第三场]序列
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 78 Solved: 32
[Submit][Status][Web Board]
Description
Input
【 数据范围与约定】
对于 20%的数据, n,m,q≤100
对于 40%的数据, n,m,q≤1000
对于 100%的数据, n,m,q≤100000, 序列中的数( 包括修改后的)
均为正数且不超过 n, 保证数据合法。
Output
Sample Input
4 2 2 1 4 2 3 2 4 3 1 3 2 6 6 2 7
Sample Output
4 3 4
HINT
【NOIP考主席树。。。hehehe】
【先建一棵主席树,外层以每个位置为根的标号建树,内层权值线段树,首次询问时在[root[l] - root[r] ]里查询[x,n]】
【然后重新建树,外层以每次询问的x为根的标号建树,内层维护有多少个包含当前点的区间,前缀和维护,查询时,如果原数小于当前要更改为的元素,那么要加上中间这一段的答案;反之,要减去中间差的这一段的答案】
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
struct node{int Left,Right;ll num;
}tree[5000010];
struct question{int qL,qR,k;
}que[100010];
ll ans;
int a[100010],root[100010];
int n,m,q,sz;int tmp(question a,question b)
{return a.k<b.k;
}void build(int &now,int l,int r,int x)
{tree[++sz]=tree[now]; now=sz;tree[now].num++;if(l==r) return;int mid=(l+r)>>1;if(x<=mid) build(tree[now].Left,l,mid,x);if(x>mid) build(tree[now].Right,mid+1,r,x);
}
ll ask(int x,int y,int l,int r,int al,int ar)
{if(al<=l&&r<=ar) return tree[y].num-tree[x].num;int mid=(l+r)>>1;ll sum=0;if(al<=mid) sum+=ask(tree[x].Left,tree[y].Left,l,mid,al,ar);if(ar>mid) sum+=ask(tree[x].Right,tree[y].Right,mid+1,r,al,ar);return sum;
}void rebuild(int&now,int l,int r,int top,int al,int ar,int opt)
{if(!opt||now<top) tree[++sz]=tree[now],now=sz;if(al<=l&&r<=ar) {tree[now].num++; return;}int mid=(l+r)>>1;if(al<=mid) rebuild(tree[now].Left,l,mid,top,al,ar,opt);if(ar>mid) rebuild(tree[now].Right,mid+1,r,top,al,ar,opt);
}
ll query(int x,int y,int l,int r,int val)
{if(l==r) return tree[y].num-tree[x].num;int mid=(l+r)>>1;ll sum=tree[y].num-tree[x].num;if(val<=mid) sum+=query(tree[x].Left,tree[y].Left,l,mid,val);if(val>mid) sum+=query(tree[x].Right,tree[y].Right,mid+1,r,val);return sum;
}
int main()
{freopen("int.txt","r",stdin);freopen("my.txt","w",stdout);int i,j;scanf("%d%d%d",&n,&m,&q);for(i=1;i<=n;++i){scanf("%d",&a[i]);root[i]=root[i-1];build(root[i],1,n,a[i]);}for(i=1;i<=m;++i){scanf("%d%d%d",&que[i].qL,&que[i].qR,&que[i].k);ans+=ask(root[que[i].qL-1],root[que[i].qR],1,n,que[i].k,n);}printf("%lld\n",ans);sort(que+1,que+m+1,tmp);memset(tree,0,sizeof(tree));int t=1; sz=0;for(i=1;i<=n;++i){root[i]=root[i-1];j=t;if(que[t].k!=i) continue;rebuild(root[i],1,n,0,que[t].qL,que[t].qR,0);while(j<=m&&que[t].k==que[j].k) ++j;for(int l=t+1;l<j;++l) rebuild(root[i],1,n,root[i],que[l].qL,que[l].qR,1);if(j>m) break; t=j;}for(i=que[m].k+1;i<=n;++i) root[i]=root[i-1];for(i=1;i<=q;++i){ll site,val;scanf("%lld%lld",&site,&val);site^=ans; val^=ans;if(a[site]<val) ans+=query(root[a[site]],root[val],1,n,site);if(a[site]>val) ans-=query(root[val],root[a[site]],1,n,site);a[site]=val;printf("%lld\n",ans);}return 0;}
转载于:https://www.cnblogs.com/lris-searching/p/9402909.html
【bzoj 十连测】[noip2016十连测第三场]Problem C: 序列(静态主席树)相关推荐
- 测试底妆的软件,倒了半瓶粉底液测了十颗美妆蛋 终于找到最好用的啦
文章来源:十点种草微信公众号 原标题:倒了半瓶粉底液,测了十颗美妆蛋,终于找到最好用的啦! 作者:蕉妹 有句话是这样说的:工欲善其事,必先利其器.想要把这个妆容学会,首先你得准备好需要的工具,装备齐了 ...
- pythonpost四种方式自杀未遂_自测练习十二
自测练习十二 所属章节 第十二讲 青少年的心理社会问题 / 自测练习 分值 0 截止提交时间 2013.06.15 作业类型 必做作业 第十二讲 练习题 一.概念解 ...
- 雷军一往无前的十年(小米十周年公开演讲)附赠《一往无前》电子书籍
▲雷军 | 中国企业家俱乐部理事.小米科技董事长 做全球最好的手机,只卖一半的价钱,让每个人都能买得起--如何能够实现这个看上去.听上去都不靠谱的目标? 来源 | 雷军公众号分享 | 雷军 2020年 ...
- jdk自带压测工具_jmeter压测工具
一.目录文件讲解 目录 bin:核心可执行文件,包含配置 mac/linux:使用jmeter启动 windows:使用jmeter.bat启动 jmeter-server:mac/linux分布式压 ...
- 视觉 SLAM 十四讲 —— 第十三讲 建图
视觉 SLAM 十四讲 -- 第十三讲 建图 在前端和后端中,我们重点关注同时估计相机运动轨迹与特征点空间位置的问题.然而,在实际使用 SLAM 时,除了对相机本体进行定位之外,还存在许多其他的需求. ...
- 人生,能有多少个十年?| PMCAFF 十年故事
PMCAFF(www.pmcaff.com):互联网产品社区,是百度,腾讯,阿里等产品经理的学习交流平台.定期出品深度产品观察,互联产品研究首选. 外包大师(www.waibaodashi.com): ...
- 八十八、Python | 十大排序算法系列(下篇)
@Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...
- 如何做好性能压测(一)丨压测环境设计和搭建
简介:如何做好性能压测(一)丨压测环境设计和搭建 一般来说,保证执行性能压测的环境和生产环境高度一致是执行一次有效性能压测的首要原则.有时候,即便是压测环境和生产环境有很细微的差别,都有可能导致整个压 ...
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5136035 转载请标明出处,原文地址:http://blog.csdn.net/mo ...
最新文章
- GNU make manual 翻译(一)
- SharePoint 2010 文档库添加文件icon
- 官方剧透:1.11 发版前我们偷看了 Flink 中文社区发起人的聊天记录
- ROS 常用命令汇总(不定期更新)
- Android之使用PopupWindow使用和总结
- itchat 道歉_人类的“道歉”
- Thinkphp js、css压缩类minify
- 01-object类,常用API
- Caffe之DataTransformer
- MySQL(6)--- 创建数据库
- 【随笔】hi3531D 音频
- python做积分计算器_PyQt5练习:积分计算器
- PSPNet运行及训练
- 软考-软件工程师常用公式及知识点
- SMART原则助你设定有效目标
- pytorch制作数据集
- 我是太阳因为自信才会把你照亮—2015许小乖的IT之路
- Excel表格视图受保护,无法编辑,怎么解除视图保护?
- SpringBoot专栏 | SpringBoot2.x系列教程之花样配置--自定义Banner
- locate用主动还是被动_主动形式表被动意义