[POI2015]Logistyka
[POI2015]Logistyka
题目大意:
一个长度为\(n(n\le10^6)\)的数列\(A_i\),初始全为\(0\)。操作共\(m(m\le10^6)\)次,包含以下两种:
- 将\(A_x\)修改为\(y\);
- 询问若每次任意选择\(x\)个正数,将它们\(-1\),能否操作\(y\)次。
思路:
用\(cnt\)表示不小于\(y\)的数的个数,\(sum\)表示小于\(y\)的数之和。
一个结论是,当\(sum\ge(x-cnt)\times y\)时可行,否则不可行。
证明参考Claris博客。
时间复杂度\(\mathcal O(m\log n)\)。
源代码:
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
inline char getalpha() {
register char ch;
while(!isalpha(ch=getchar()));
return ch;
}
const int N=1e6+1,M=1e6;
typedef long long int64;
struct Query {
bool opt;
int x,y;
};
Query q[M];
int tmp[N],w[N];
class SegmentTree {
#define _left <<1
#define _right <<1|1
#define mid ((b+e)>>1)
private:
int64 val[2][N<<2],*cnt,*sum;
void push_up(const int &p) {
cnt[p]=cnt[p _left]+cnt[p _right];
sum[p]=sum[p _left]+sum[p _right];
}
public:
SegmentTree() {
cnt=val[0];
sum=val[1];
}
void modify(const int &p,const int &b,const int &e,const int &x,const int &y) {
if(b==e) {
cnt[p]+=y;
sum[p]+=tmp[x]*y;
return;
}
if(x<=mid) modify(p _left,b,mid,x,y);
if(x>mid) modify(p _right,mid+1,e,x,y);
push_up(p);
}
int64 query(const int &p,const int &b,const int &e,const int &l,const int &r,const bool &t) const {
if(b==l&&e==r) return val[t][p];
int64 ret=0;
if(l<=mid) ret+=query(p _left,b,mid,l,std::min(mid,r),t);
if(r>mid) ret+=query(p _right,mid+1,e,std::max(mid+1,l),r,t);
return ret;
}
#undef _left
#undef _right
#undef mid
};
SegmentTree t;
int main() {
const int n=getint(),m=getint();
for(register int i=0;i<m;i++) {
const char opt=getalpha();
const int x=getint(),y=getint();
q[i]=(Query){opt=='Z',x,y};
tmp[++tmp[0]]=y;
}
std::sort(&tmp[1],&tmp[tmp[0]]+1);
tmp[0]=std::unique(&tmp[1],&tmp[tmp[0]]+1)-&tmp[1];
for(register int i=0;i<m;i++) {
q[i].y=std::lower_bound(&tmp[1],&tmp[tmp[0]]+1,q[i].y)-tmp;
const int &x=q[i].x,&y=q[i].y;
if(q[i].opt) {
const int cnt=t.query(1,1,tmp[0],y,tmp[0],0);
const int64 sum=y!=1?t.query(1,1,tmp[0],1,y-1,1):0;
puts(sum>=(int64)(x-cnt)*tmp[y]?"TAK":"NIE");
} else {
if(w[x]) t.modify(1,1,tmp[0],w[x],-1);
w[x]=y;
if(w[x]) t.modify(1,1,tmp[0],w[x],1);
}
}
return 0;
}
[POI2015]Logistyka的更多相关文章
- 【BZOJ4378】[POI2015]Logistyka 树状数组
[BZOJ4378][POI2015]Logistyka Description 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这 ...
- BZOJ4378 : [POI2015]Logistyka
对于每个询问,设不小于$s$的个数为$cnt$,小于$s$的和为$sum$. 那么如果可以进行$s$轮,当且仅当$sum\geq (c-cnt)\times s$. 权值线段树维护,时间复杂度$O(m ...
- 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,询问能否进行 ...
- 【bzoj4378】[POI2015]Logistyka 离散化+树状数组
题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作.每次 ...
- @bzoj - 4378@ [POI2015] Logistyka
目录 @description@ @solution@ @accepted code@ @details@ @description@ 维护一个长度为 n 的序列,一开始都是 0,支持以下两种操作: ...
- [Poi2015]
[POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...
- POI2015题解
POI2015题解 吐槽一下为什么POI2015开始就成了破烂波兰文题目名了啊... 咕了一道3748没写打表题没什么意思,还剩\(BZOJ\)上的\(14\)道题. [BZOJ3746][POI20 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- python+selenium初学者常见问题处理
要做web自动化,第一件事情就是搭建自动化测试环境,那就没法避免的要用到selenium了. 那在搭建环境和使用过程中经常会遇到以下几类问题: 1.引入selenium包失败: 出现这种错误,一般分为 ...
- ansible的几点记录
user模块的password加密 ansible中user模块的password需要传入加密数据,可以通过这种方式快速加密: To get a sha512 password hash (rando ...
- 数据库-mysql事务
MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...
- spotlight on mysql--安装以及简介
Spotlight on MySQL 安装与配置 第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connecto ...
- Python基础 - 系统进程调用
subprocess模块 近期发现还有一个更好的用于取代subprocess的库,sh,也是openstack当中使用的库.
- MySQL学习笔记:从一个表update到另外一个表
# ---- 测试数据 ---- # 表1 CREATE TABLE temp_x AS AS c_id, 1.11 AS c_amount FROM DUAL UNION ALL AS c_id, ...
- Baidu软件研发工程师笔试题整理
Hadoop Map/Reduce Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别 ...
- Ninject中调用webapi卡住的情况解决
过年这两天在家做项目,把mvc升级到了5.1,webapi升级到了2.1,忽然发现一个问题,在某些页面上ajax调用webapi时会发现卡死现象,CPU也没有被占用,就是网页一些在加载也不报错,经过2 ...
- Pg168-1
1.Pg168-1 package org.hanqi.pn0120; public class Computer { private double neicundx=10; public doubl ...
- Kafka(四)Kafka在zookeeper中的存储
一 Kafka在zookeeper中存储结构图 二 分析 2.1 topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 [zk: ...