题目大意:维护一个集合,支持单点修改、查询小于 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的更多相关文章

  1. 树状数组【洛谷P3586】 [POI2015]LOG

    P3586 [POI2015]LOG 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1 ...

  2. 洛谷 P3586 [POI2015]LOG

    P3586 [POI2015]LOG 题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它 ...

  3. 洛谷P3586 [POI2015]LOG(贪心 权值线段树)

    题意 题目链接 Sol 显然整个序列的形态对询问没什么影响 设权值\(>=s\)的有\(k\)个. 我们可以让这些数每次都被选择 那么剩下的数,假设值为\(a_i\)次,则可以\(a_i\)次被 ...

  4. 洛谷 P1890 gcd区间

    P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...

  5. 洛谷 P3927 Factorial

    题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数. 但是SOL菌太菜了于是请 ...

  6. 洛谷 P3377 【模板】左偏树(可并堆)

    洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或 ...

  7. 洛谷 P3370 【模板】字符串哈希

    洛谷 P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的 ...

  8. 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  9. 洛谷P3434 [POI2006]KRA-The Disks(线段树)

    洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直 ...

随机推荐

  1. Mysql8.0的登录大坑……(忘记登录密码也可以这么搞)

    关于安装和使用就不说了,属于基本操作了: 我来重点记录一下关于使用前,使用navicat登录的时候报错,1130和2059 查看安装后随机生成的密码: grep 'temporary password ...

  2. Redis+Keepalived高可用环境部署记录

    Keepalived 实现VRRP(虚拟路由冗余)协议,从路由级别实现VIP切换,可以完全避免类似heartbeat脑裂问题,可以很好的实现主从.主备.互备方案,尤其是无状态业务,有状态业务就需要额外 ...

  3. Jenkins构建自动化任务

    前言 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 一.环境配置 1.切换到jenkins ...

  4. 总结and规划

    不知不觉中又过去了一年,马上就要读研究生了,因此有必要对自己进行必要的总结,以及对自己有个良好的规划. 首先,描述自己当前的心情——对未来充满了恐惧和焦虑. 马上大学就要毕业了,回首经历的大学生涯,似 ...

  5. M2团队贡献分分配

    经过考虑,M2阶段团队贡献分分配如下: 团队成员 贡献分 12061166 宋天舒 56 12061157 黄漠源 52 12061159 张迎春 55 12061175 刘翔宇 54 1206117 ...

  6. hibernate ehcache二级缓存

    xml配置 <?xml version="1.0" encoding="UTF-8"?> <ehcache> <!-- Sets ...

  7. idHTTP 向网站发送json格式数据

    idHTTP 向网站发送json格式数据 var rbody:tstringstream; begin rbody:=tstringstream.Create('{"name":& ...

  8. Windows 安装补丁的另外一种方法

    Windows的补丁安装时经常出现异常提示: 如果安装不上的话 可以使用dism的方式来进行安装: 具体方法: 1. 将补丁包 一般为msu 或者是exe文件,改成rar后缀,并且解压缩,获取cab文 ...

  9. Win10 1803 Spring Creators update Consumer edition的版本记录

    安装时可选择的版本列表 安装完之后的版本: 3. 时间线更新 4. Focus assistant

  10. Angular 添加路由

    var app=angular.module('kaifanla',['ng','ngRoute']);app.config(function($routeProvider){ //添加路由 $rou ...