树状数组【洛谷P3586】 [POI2015]LOG
P3586 [POI2015]LOG
维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a。2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作。每次询问独立,即每次询问不会对序列进行修改。
离散化按照权值建立树状数组。
那么对于大于s的值,可以直接减去s,这一部分的贡献为\(c*(query_{geshu}(tot)-query_{geshu}(s-1))\)。
剩下的数,我们只知道他们小于s,但是不知道确切的值所以并不能用上述方法求出贡献。
但是我们知道每个数的大小,那么可以求出每个数的权值*个数之和,这些是可以作为贡献的。
也就是\(query_{quanzhi}(s-1)\)。
注意离散化。
对于离散化,一定注意当前的值要用离散化之后的还是之前的。
之后的用\(lowerbound\)求出,之后的再用求出的序号带入到离散化数组就可以。
code:
#include <iostream>
#include <cstdio>
#include <algorithm>
#define int long long
using namespace std;
const int wx=3000017;
inline int read(){
int sum=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0'; ch=getchar();}
return sum*f;
}
int a[wx],sum_geshu[wx],sum_quanzhi[wx],b[wx];
int n,m,tot;
int c[wx];
char opt[7];
struct node{
int flag,num,to;
int c,s;
}t[wx];
void add1(int pos,int k){
for(int i=pos;i<=tot;i+=(i&-i))
sum_geshu[i]+=k;
}
int query1(int pos){
int re=0;
for(int i=pos;i>=1;i-=(i&-i))
re+=sum_geshu[i];
return re;
}
void add2(int pos,int k){
for(int i=pos;i<=tot;i+=(i&-i))
sum_quanzhi[i]+=k;
}
int query2(int pos){
int re=0;
for(int i=pos;i>=1;i-=(i&-i))
re+=sum_quanzhi[i];
return re;
}
signed main(){
n=read(); m=read();
for(int i=1;i<=m;i++){
scanf("%s",opt+1);
if(opt[1]=='U'){
t[i].flag=1;
t[i].num=read();
t[i].to=read();
b[++tot]=t[i].to;
}
else{
t[i].c=read();
t[i].s=read();
b[++tot]=t[i].s;
}
}
sort(b+1,b+1+tot);
for(int i=1;i<=m;i++){
if(t[i].flag){
int tmp=lower_bound(b+1,b+1+tot,t[i].to)-b;
if(a[t[i].num]){
add1(a[t[i].num],-1);add2(a[t[i].num],-b[a[t[i].num]]);
}
if(tmp){
add1(tmp,1); a[t[i].num]=tmp; add2(tmp,b[tmp]);
}
}
else{
int s=lower_bound(b+1,b+1+tot,t[i].s)-b;
int tmp=b[s]*(t[i].c-(query1(tot)-query1(s-1)));
if(tmp<=query2(s-1))puts("TAK");
else puts("NIE");
}
}
return 0;
}
树状数组【洛谷P3586】 [POI2015]LOG的更多相关文章
- 洛谷 P3586 [POI2015]LOG
P3586 [POI2015]LOG 题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它 ...
- 树状数组 洛谷P3616 富金森林公园
P3616 富金森林公园 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积水也有 ...
- 洛谷P3586 [POI2015]LOG(贪心 权值线段树)
题意 题目链接 Sol 显然整个序列的形态对询问没什么影响 设权值\(>=s\)的有\(k\)个. 我们可以让这些数每次都被选择 那么剩下的数,假设值为\(a_i\)次,则可以\(a_i\)次被 ...
- P3374 【模板】树状数组 1--洛谷luogu
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- P3368 【模板】树状数组 2--洛谷luogu
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- 【洛谷P3586】LOG
题目大意:维护一个集合,支持单点修改.查询小于 X 的数的个数.查询小于 X 的数的和. 题解:学习到了动态开点线段树.对于一棵未经离散化的权值线段树来说,对于静态开点来说,过大的值域会导致不能承受的 ...
- HDU 6278 - Just h-index - [莫队算法+树状数组+二分][2018JSCPC江苏省赛C题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6278 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...
- 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询
题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...
- hdu 4991(树状数组+DP)
Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- bzoj 1901: Zju2112 Dynamic Rankings【整体二分+树状数组||主席树+树状数组】
整体二分: 对于每一个修改操作,标记为1,并且加一个标记为-1的这个位置原来值,并且对于a数列每个点都当成修改操作 然后整体二分,扫当前操作区间lr,把在值域区间标记为1和-1的操作都在树状数组对应位 ...
随机推荐
- [C#] 等待启动的进程执行完毕
有能有时候我们启动了一个进程,必须等到此进程执行完毕,或是,一段时间, 关闭进程后再继续往下走. Example sample1 等待应用程序执行完毕 //等待应用程序执行完毕 private voi ...
- c++builder 编译独立运行
cb6 XE7 Project>Options> Packages>Runtime Packages>Link with runtime packags勾去掉.c++ Link ...
- printf("%f\n", 3);输出结果为什么是0.000000(转载)
printf不会关心你输入的参数的类型,你输入的实际是 printf("%f",3),但是这个整型3不会被隐式类型转换为浮点型,而是被直接按内存内容当作浮点型 也就是说,内部使用等 ...
- python实现文件下载的方法总结
前端时间遇到一个通过url下载文件的需求,只需要简单的编写一个py脚本即可.从网上搜了下python实现文件下载的方法,总结如下,备查. 以下方法均已测试,环境win8.1 python2.6/2. ...
- Uboot详细解析1
uboot 详细注释讲解 声明:该贴是通过参考其他人的帖子整理出来,从中我加深了对uboot的理解,我知道对其他人一定也是有很大的帮助,不敢私藏,如果里面的注释有什么错误请给我回复,我再加以修改.有些 ...
- spring注解注入属性
- java基础之io流总结三:字节流读写
字节流读写适用于任何文件,包括图片,视频等. 基本字节流 一次读一个字节和一次读一个字节数组 FileInputStream fis = new FileInputStream(path); //一次 ...
- 记一篇Python学习的简易版教程
廖雪峰的教学博客https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143178 ...
- Deepin 2014.2正式版发布 - 自由·独特·前卫
感谢 deepin 的投递 deepin致力于为全球用户提供美观易用.安全可靠的Linux系统. deepin系统使用基于HTML5技术开发的深度桌面环境,搭配深度音乐.深度影院.WPS和搜狗输入法等 ...
- boost库中sleep方法详解
博客转载自:https://blog.csdn.net/huang_xw/article/details/8453506 boost库中sleep有两个方法: 1. 这个方法只能在线程中用, 在主线程 ...