树状数组【洛谷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的操作都在树状数组对应位 ...
随机推荐
- Open XML 检索 EXCEL
1.Excel 隐藏行判断 项目的 Hidden 属性不为 null,且 Hidden 属性的值为 True var itemList = ws.Descendants<Row>(). W ...
- Android studio如何和VS的region一样折叠代码
相信用过VS的朋友都会经常有用到VS的region来折叠代码,非常方便.那么Android studio是否可以呢?当然可以. 选择代码,Ctrl + Alt + T 选择 第二项,这样就可以啦
- Spring Cloud Zuul 2(基于配置中心的动态API网关)
在大体了解了API Zuul 和 配置中心Config后我们来尝试完成一个基于配置中心的动态API网关 创建项目 命名为api-gateway-dynamic-route并加入config 和 Zuu ...
- libevent源码深度剖析七
libevent源码深度剖析七 ——事件主循环 张亮 现在我们已经初步了解了libevent的Reactor组件——event_base和事件管理框架,接下来就是libevent事件处理的中心部分 — ...
- python pipelines 用法
http://zacstewart.com/2014/08/05/pipelines-of-featureunions-of-pipelines.html http://blog.csdn.net/m ...
- pip指定安装包版本
pip是目前最好用的python包关系工具,没有之一. 1.版本范围符号:==.>=.<=.>.<. 2.单个安装示例: 1 2 3 pip install cchardet ...
- 对C#泛型讲的很好的一篇文章
请参考 https://www.cnblogs.com/kissdodog/archive/2013/01/27/2879185.html
- Why does my Authorize Attribute not work?
the roles of a ClaimsPrincipal are actually just claims create with a type of ClaimsIdentity.RoleCla ...
- 当this指针成为指向之类的基类指针时,也能形成多态
this指针: 1)对象中没有函数,只有成员变量 2)对象调用函数,通过this指针告诉函数是哪个对象自己谁. #include<iostream> using namespace std ...
- bootstrap页面效果图
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...