树状数组【洛谷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的操作都在树状数组对应位 ...
随机推荐
- leetcode821
vector<int> shortestToChar(string S, char C) { vector<int> V; ; int AYC[N]; ; ; i < S ...
- kibana.yml(中文配置详解)
# Kibana is served by a back end server. This controls which port to use. # server.port: 5601 # The ...
- CE学习记录1
主题 春节放假终于有空学习下怎么制作外挂啦......学习写外挂大概是我一开始学习计算机的动力吧....只是一直似懂非懂..看教学视频各种不明白为什么....也没有专门的时间学习下怎么写....春节有 ...
- 安装saltstack-web管理界面
1.安装salt-master.salt-minion和salt-api $ sudo yum install epel-release -y $ sudo yum install salt-mast ...
- 【转】在SharePoint Server 2010中更改“我的网站”
在安装SharePoint Server 2010的时候,创建的第一个站点是一个"NetBIOS名称"的网站,而这个时候,"我的网站"(或称"个人网站 ...
- jQuery 对象和 json 之间的转换
JSON.parse() json 转换成 对象 JSON.stringify() 对象转换成json 想问下广大网友大神 js 里面有数组转换或者转换成数组的函数么?小弟等--
- Python 安装urllib3
一.系统环境 操作系统:Win10 64位 Python版本:Python 3.7.0 二.报错信息 No module named 'urllib3' 三.安装参考 1.参照网上的安装方法通过pip ...
- 10.Execution failed with exit status: 3
错误信息: insert overwrite table t_mobile_mid_use_p_tmp4_rcf select '201411' as month_id, a.prov_id, a.c ...
- css溢出文本显示省略号
css div { width: 200px; height: 200px; border: 1px solid; /* 以下四条缺一不可 其中 display:block 为隐藏条件 */ disp ...
- WCF项目问题1-找不到类型“WCFService.Service1”,它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供。
找不到类型“WCFService.Service1”,它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHosti ...