BZOJ4378 : [POI2015]Logistyka
对于每个询问,设不小于$s$的个数为$cnt$,小于$s$的和为$sum$。
那么如果可以进行$s$轮,当且仅当$sum\geq (c-cnt)\times s$。
权值线段树维护,时间复杂度$O(m\log m)$。
证明:
如果$cnt\geq c$,那么显然可以每次取$c$个。
否则如果$sum\geq (c-cnt)\times s$,那么小于$s$的个数必然不小于$c$,可以每次取最大的$c$个来完成。
当$sum<(c-cnt)\times s$时,那么无论怎么取,都是做不到$s$轮的。
#include<cstdio>
#include<algorithm>
const int N=1000010,M=2100000;
int n,m,i,x,y,a[N],b[N],cb,op[N][3],v[M],cnt;long long s[M],sum;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline int lower(int x){
int l=1,r=cb,mid,t=cb+1;
while(l<=r)if(b[mid=(l+r)>>1]>=x)r=(t=mid)-1;else l=mid+1;
return t;
}
inline void ins(int c,int V,int S){
if(!c)return;
int a=1,b=cb,x=1,mid;
while(1){
v[x]+=V,s[x]+=S;
if(a==b)return;
mid=(a+b)>>1,x<<=1;
if(c<=mid)b=mid;else a=mid+1,x++;
}
}
inline void ask(int c){
int a=1,b=cb,x=1,mid;
if(c>cb){cnt=0,sum=s[1];return;}
cnt=v[1],sum=0;
while(a<b){
mid=(a+b)>>1,x<<=1;
if(c<=mid)b=mid;else cnt-=v[x],sum+=s[x],a=mid+1,x++;
}
}
int main(){
read(n),read(m);
for(i=1;i<=m;i++){
char ch;
while((ch=getchar())!='U'&&ch!='Z');
op[i][0]=ch,read(op[i][1]),read(op[i][2]);
if(ch=='U')b[++cb]=op[i][2];
}
std::sort(b+1,b+cb+1);
for(i=1;i<=m;i++){
x=op[i][1],y=op[i][2];
if(op[i][0]=='U'){
ins(a[x],-1,-b[a[x]]);
a[x]=lower(y);
ins(a[x],1,y);
}else{
ask(lower(y));
puts(sum>=1LL*(x-cnt)*y?"TAK":"NIE");
}
}
return 0;
}
BZOJ4378 : [POI2015]Logistyka的更多相关文章
- BZOJ4378[POI2015]Logistyka——树状数组
题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作.每次 ...
- 【BZOJ4378】[POI2015]Logistyka 树状数组
[BZOJ4378][POI2015]Logistyka Description 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这 ...
- [POI2015]Logistyka
[POI2015]Logistyka 题目大意: 一个长度为\(n(n\le10^6)\)的数列\(A_i\),初始全为\(0\).操作共\(m(m\le10^6)\)次,包含以下两种: 将\(A_x ...
- 【bzoj4378】[POI2015]Logistyka 离散化+树状数组
题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作.每次 ...
- bzoj 4378: [POI2015]Logistyka ——树桩数组+离散化
Description 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行 ...
- @bzoj - 4378@ [POI2015] Logistyka
目录 @description@ @solution@ @accepted code@ @details@ @description@ 维护一个长度为 n 的序列,一开始都是 0,支持以下两种操作: ...
- POI2015题解
POI2015题解 吐槽一下为什么POI2015开始就成了破烂波兰文题目名了啊... 咕了一道3748没写打表题没什么意思,还剩\(BZOJ\)上的\(14\)道题. [BZOJ3746][POI20 ...
- [Poi2015]
[POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- REORG TABLESPACE on z/os
这个困扰了我两天的问题终于解决了,在运行这个job时:总是提示 A REQUIRED DD CARD OR TEMPLATE IS MISSING NAME=SYSDISC A REQUIRED DD ...
- md5sum
[root@NB index]# ls index()().html index()().html index()().html index()().html index()().html [root ...
- 验证码的种类与实现 C#封装类 - .NET MVC WEBFORM
验证码方式 1.随机字母或者数字,纯文本验证码 这种非常容易破解 ,市场上有大量的现成接口或者工具,背景越复杂难度越高. 2.题库验证码 要破解这种验证码,需要人工收集题库才可以破解,可以免疫不是专门 ...
- Delphi之DLL知识学习3---为什么要使用DLL
使用DLL有若干理由,其中有一些前面提到过的.大体说来,使用动态链接库可以共享代码.系统资源,可以隐藏实现的代码或底层的系统例程.设计自定义控件 一.共享代码.资源和数据 前面已经提到,共享代码是创建 ...
- Pyqt QSplashScreen启动画面
多大数应用程序启动时都会在程序完全启动时显示一个启动画面,在程序完全启动后消失.程序启动画面可以显示一些有关产品的信息,让用户在等待程序启动的同时了解有关产品的功能,也是一个宣传的方式.QSplash ...
- 【翻译三】java-并发之线程对象和实现
Thread Objects Each thread is associated with an instance of the class Thread. There are two basic s ...
- 常用的Java代码汇总
1. 字符串有整型的相互转换 Java 1 2 <strong>Stringa=String.valueOf(2); //integer to numeric ...
- gcc参数-l传递顺序错误导致`undefined reference'的一点小结
刚才编译一个pthread的单文件程序, 使用的命令行是: gcc -o thread1 -lpthread thread1.c 结果报错: $ gcc -o thread1 -lpthread th ...
- 浅学JSON——Json.NET之首次试手
首次遭遇Json格式,缘由项目中用到Json数据,需要进行解析,为此,将Json数据转为了自己较为熟悉的DataTable格式,以此展示至DataGridView中,验证是否成功. 直接上代码: // ...
- JavaScript中new和this
[TOC] new var obj = new Base(); 相当于: var obj = {}; //创建空对象obj obj.__proto__ = Base.prototype; //将空对象 ...