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 ...
随机推荐
- 警告 - no rule to process file 'WRP_CollectionView/README.md' of type net.daringfireball.markdown for architecture i386
warning: no rule to process file '/Users/mac/Downloads/Demo/Self/WRP_CollectionView/WRP_CollectionVi ...
- DHCP的若干原理解释
转自:http://blog.chinaunix.net/uid-22287947-id-1775641.html 搜罗了几种关于dhcp的原理和过程解释 DHCP(Dynamic Host Conf ...
- 设计模式学习之适配器模式(Adapter,结构型模式)(14)
参考链接:http://www.cnblogs.com/zhili/p/AdapterPattern.html一.定义:将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼 ...
- python类中的super,原理如何?MRO是什么东东?
下面这个URL解释得比较清楚. http://python.jobbole.com/86787/?utm_source=group.jobbole.com&utm_medium=related ...
- [译]关于.NET Core1.1的通告
以下翻译可能会有不准确的地方, 想看原文的童鞋移步到Announcing .NET Core 1.1, 微软的开源真心喜欢, 希望有更多的童鞋关注微软, 关注.NET Core 我们很兴奋地宣布.NE ...
- Ajax 数据库操作
为了清楚的说明使用 Ajax 从数据库中存取信息有多么容易,我们要构建一个 MySQL 查询,然后把结果显示在ajax.html 上.但是在我们开始之前,让我们先做一些基础工作.使用下面的命令创建一个 ...
- php开发(TP框架使用)
由于最近玩了PHP,我向来有个原则,学一门服务端语言至少得玩两个框架,前段时间用PHP写了些demo+小项目,看见身边有人在使用TP,于是乎鼓捣学习学习.如何学,无非也就是做个小demo:就目前看来现 ...
- css 妙味 总结
技巧一: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...
- phpcms v9中调用栏目及调用多个子栏目中的文章列表
调用一个指定栏目列表: {pc:content action="lists" catid="6" order="id DESC& ...
- 向Word模板中填充数据
现在有这样的需求,给Word文档的指定位置填充上特定数据,例如我们有一个终端,用来打印员工的薪资证明,对于一个公司来说,他的薪资证明模板是固定的,变化的地方是员工姓名,部门,职位等.我们只需要将这些指 ...