【洛谷P3586】LOG
题目大意:维护一个集合,支持单点修改、查询小于 X 的数的个数、查询小于 X 的数的和。
题解:学习到了动态开点线段树。对于一棵未经离散化的权值线段树来说,对于静态开点来说,过大的值域会导致不能承受的空间。还可以发现,对于每次修改操作只会涉及一条树链,即:\(O(logn)\) 个节点,因此总共所需的空间为 \(O(mlogn)\)。基于以上想法,采用动态开点的操作,即:该节点被修改,则动态地创建这个节点。反之,没有被用到的节点直接忽略掉即可。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e7+10;
const int mx=1e9+1;
inline int read(){
int x=0,f=1;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
return f*x;
}
int n,m,a[maxn];
struct node{
#define ls(x) t[x].lc
#define rs(x) t[x].rc
int lc,rc,size;
long long sum;
}t[maxn<<1];
int tot,root;
inline void pushup(int o){
t[o].size=t[ls(o)].size+t[rs(o)].size;
t[o].sum=t[ls(o)].sum+t[rs(o)].sum;
}
void modify(int &o,int l,int r,int pos,int val){
if(!o)o=++tot;
if(l==r){t[o].size+=val,t[o].sum+=l*val;return;}
int mid=l+r>>1;
if(pos<=mid)modify(ls(o),l,mid,pos,val);
else modify(rs(o),mid+1,r,pos,val);
pushup(o);
}
long long querys(int o,int l,int r,int x,int y){
if(!o)return 0;
if(l==x&&r==y)return t[o].sum;
int mid=l+r>>1;
if(y<=mid)return querys(ls(o),l,mid,x,y);
else if(x>mid)return querys(rs(o),mid+1,r,x,y);
else return querys(ls(o),l,mid,x,mid)+querys(rs(o),mid+1,r,mid+1,y);
}
int querysz(int o,int l,int r,int x,int y){
if(!o)return 0;
if(l==x&&r==y)return t[o].size;
int mid=l+r>>1;
if(y<=mid)return querysz(ls(o),l,mid,x,y);
else if(x>mid)return querysz(rs(o),mid+1,r,x,y);
else return querysz(ls(o),l,mid,x,mid)+querysz(rs(o),mid+1,r,mid+1,y);
}
void solve(){
n=read(),m=read();
char opt[2];
while(m--){
scanf("%s",opt);
if(opt[0]=='U'){
int pos=read(),val=read();
modify(root,0,mx,a[pos],-1);
modify(root,0,mx,a[pos]=val,1);
}else{
int c=read(),s=read();
int k=querysz(root,0,mx,s,mx);
long long sum=querys(root,0,mx,0,s-1);
puts(sum>=(long long)s*(c-k)?"TAK":"NIE");
}
}
}
int main(){
solve();
return 0;
}
【洛谷P3586】LOG的更多相关文章
- 树状数组【洛谷P3586】 [POI2015]LOG
P3586 [POI2015]LOG 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1 ...
- 洛谷 P3586 [POI2015]LOG
P3586 [POI2015]LOG 题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它 ...
- 洛谷P3586 [POI2015]LOG(贪心 权值线段树)
题意 题目链接 Sol 显然整个序列的形态对询问没什么影响 设权值\(>=s\)的有\(k\)个. 我们可以让这些数每次都被选择 那么剩下的数,假设值为\(a_i\)次,则可以\(a_i\)次被 ...
- 洛谷 P1890 gcd区间
P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...
- 洛谷 P3927 Factorial
题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数. 但是SOL菌太菜了于是请 ...
- 洛谷 P3377 【模板】左偏树(可并堆)
洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或 ...
- 洛谷 P3370 【模板】字符串哈希
洛谷 P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的 ...
- 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)
洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...
- 洛谷P3434 [POI2006]KRA-The Disks(线段树)
洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直 ...
随机推荐
- C#_Math函数总结
Math.abs() 计算绝对值. Math.acos() 计算反余弦值. Math.asin() 计算反正弦值. Math.atan() 计算反正切值. Math.atan2() 计算从x 坐标轴到 ...
- CSS 尺寸 (Dimension) 实例
CSS 尺寸 (Dimension) 实例CSS 尺寸属性CSS 尺寸属性允许你控制元素的高度和宽度.同样,还允许你增加行间距. 属性 描述height 设置元素的高度.line-height 设置行 ...
- 关于用tesseract和tesserocr识别图片的一个问题
对于像我这样初学python网络爬虫的freshman来说,软件的准备和环境的配置能让我们崩溃.其中用刚安装好的tesseract和tesserocr库测试识别验证码就是其中一例. 这里我要测试的验证 ...
- 终于做完了这个pj
首先要说这个博客网站实在是功能太弱!不知道为什么还要每次写博客.直接交作业不好吗- -b 1.估计时间: 看见这个任务就觉得很难啊,估计装vs2012就得半天,然后上学期选修的c++基本上都忘光了,本 ...
- BUAAMOOC项目终审报告
工作总结 我们是歪果仁带你灰开发团队.我们开发的项目是北航学堂(MOOC)的android客户端:BUAAMOOC. 目前我们完成了主要功能,包括UI设计,视频播放,视频下载,学习进度,个人信息等功能 ...
- 【实践报告】Linux基础实践一
[chmod 命令] chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限. 该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设 ...
- This Android SDK requires Android Developer Toolkit version 17.0.0 or above. Current version is 10.0.0.v201102162101-104271. Please update ADT to the latest version.
win7/xp 下面安装Android虚拟机,更新SDK后,在Eclipse preference里指向android-sdk-windows时. 出现 : This Android SDK requ ...
- 软件工程第二次程序的作业:Java计算器实验
1.计算器实验报告 2.https://github.com/lollipopangel/test/tree/master 3.实验截图 7+8 清除 六.总结 通过本次实验让我对JFrame类.JP ...
- 小学四则运算APP 第二阶段冲刺-第五天
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第二次冲刺阶段时间:11.29~12.09 本次发布的是判断题代码,已经实现部分功能,,但是美中不足的是判断错误 panduanset.j ...
- Apache的Thrift引发的编译思考
最近偶然看到了Apache的Thrift,感觉有点像Corba架构后的变种(赞一个,Facebook真伟大).WSDL能生成C#和Java的(SOAP标准接口,做WebService都用过).Corb ...