【BZOJ4378】[POI2015]Logistyka

Description

维护一个长度为n的序列,一开始都是0,支持以下两种操作:
1.U k a 将序列中第k个数修改为a。
2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作。
每次询问独立,即每次询问不会对序列进行修改。

Input

第一行包含两个正整数n,m(1<=n,m<=1000000),分别表示序列长度和操作次数。
接下来m行为m个操作,其中1<=k,c<=n,0<=a<=10^9,1<=s<=10^9。

Output

包含若干行,对于每个Z询问,若可行,输出TAK,否则输出NIE。

Sample Input

3 8
U 1 5
U 2 7
Z 2 6
U 3 1
Z 2 6
U 2 2
Z 2 6
Z 2 1

Sample Output

NIE
TAK
NIE
TAK

题解:我们考虑什么情况下询问有解。若一个数>s,那么我们肯定贪心的每次都让它-1,但是它最多只能取s次,所以它跟s没什么区别;若一个数≤s,那我们贪心的将它取到0,它对总和的贡献就是它本身。所以综上所述,有解的条件就是 ∑min(v[i],s) (1≤i≤n)≥c*s。我们只需要维护两个树状数组,一个记录>s的数的个数,一个记录≤s的数的总和,然后只要 个数*s+总和≥c*s就行了

需要离散化,别忘开long long

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=1000010;
int n,m,nm;
char str[5];
struct node
{
int org;
ll num;
}p[maxn<<1];
int qa[maxn],qc[maxn];
ll ref[maxn<<1],s1[maxn],s2[maxn],v[maxn],qb[maxn];
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
void up1(int x,ll val)
{
for(int i=x;i<=nm;i+=i&-i) s1[i]+=val;
}
void up2(int x,ll val)
{
for(int i=x;i<=nm;i+=i&-i) s2[i]+=val;
}
ll q1(int x)
{
int i=x;
ll ret=0;
for(i=x;i;i-=i&-i) ret+=s1[i];
return ret;
}
ll q2(int x)
{
int i=x;
ll ret=0;
for(i=x;i;i-=i&-i) ret+=s2[i];
return ret;
}
bool cmp(node a,node b)
{
return a.num<b.num;
}
int main()
{
n=rd(),m=rd();
int i,j,a,b;
for(i=1;i<=m;i++)
{
scanf("%s",str),qa[i]=rd(),p[i].num=rd(),p[i].org=i;
if(str[0]=='U') qc[i]=0;
else qc[i]=1;
}
sort(p+1,p+m+1,cmp);
ref[1]=0,nm=1;
for(i=1;i<=m;i++)
{
if(p[i].num>ref[nm]) ref[++nm]=p[i].num;
qb[p[i].org]=nm;
}
for(i=1;i<=n;i++) up1(1,1),v[i]=1;
for(i=1;i<=m;i++)
{
if(!qc[i])
{
up1(v[qa[i]],-1),up2(v[qa[i]],-ref[v[qa[i]]]),v[qa[i]]=qb[i];
up1(qb[i],1),up2(qb[i],ref[qb[i]]);
}
else
{
if((n-q1(qb[i]))*ref[qb[i]]+q2(qb[i])>=qa[i]*ref[qb[i]]) printf("TAK\n");
else printf("NIE\n");
}
}
return 0;
}

【BZOJ4378】[POI2015]Logistyka 树状数组的更多相关文章

  1. BZOJ4378[POI2015]Logistyka——树状数组

    题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作.每次 ...

  2. BZOJ_4378_[POI2015]Logistyka_树状数组

    BZOJ_4378_[POI2015]Logistyka_树状数组 Description 维护一个长度为n的序列,一开始都是0,支持以下两种操作: 1.U k a 将序列中第k个数修改为a. 2.Z ...

  3. 【bzoj4378】[POI2015]Logistyka 离散化+树状数组

    题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作.每次 ...

  4. [POI2015]LOG(树状数组)

    今天考试考了这题,所以来贡献\([POI2015]LOG\)的第一篇题解.代码略丑,调了快三个小时才调出来\(AC\)代码. 对于这种小清新数据结构题,所以我觉得树状数组才是这道题的正确打开方式. 首 ...

  5. 【BZOJ4382】[POI2015]Podział naszyjnika 堆+并查集+树状数组

    [BZOJ4382][POI2015]Podział naszyjnika Description 长度为n的一串项链,每颗珠子是k种颜色之一. 第i颗与第i-1,i+1颗珠子相邻,第n颗与第1颗也相 ...

  6. 【BZOJ4384】[POI2015]Trzy wieże 树状数组

    [BZOJ4384][POI2015]Trzy wieże Description 给定一个长度为n的仅包含'B'.'C'.'S'三种字符的字符串,请找到最长的一段连续子串,使得这一段要么只有一种字符 ...

  7. 树状数组【洛谷P3586】 [POI2015]LOG

    P3586 [POI2015]LOG 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1 ...

  8. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  9. bzoj1878--离线+树状数组

    这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...

随机推荐

  1. Latex插入项目列表符号

    1. 关于 {itemize}里序号的形式 (这个在书里有介绍): latex默认生成的简单列表, 默认为一个小圆点,..... 而我们在写文章时可能想要一些不一样的列表符号, 比如 -, * 之类的 ...

  2. swift2.0中文版教程

    有些同学问我要swift的中文版教程,为了节省大家的找资料的时间,我就把我网上下载的PDF放到这里共享好了. 点击链接或者右击选择下载文件进行下载:swift2.0中文版教程 在此也感谢翻译者们的贡献 ...

  3. .Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)

    过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西.现在好了,趁着找工作的这段空余时间,正好可以总结和再继续夯实自己的.Net, C#基本功.在05年的时候,Scott Han ...

  4. 纹理mag filter不能取GL_XXX_MIPMAP_XXXX

    今天遇到OpenGL error 0x0500错误,定位到 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter); 查看ma ...

  5. C语言 文件操作

    /** *@author cody *@date 2014-08-09 *@description copy text file * FILE *fopen(filename,openmode) * ...

  6. 获取表单select域的选择部分的文本

    body> <form action="index.php"> <select name="" id="select" ...

  7. QT .pro文件 LIBS用法详解

    在程序中需要使用到团队其它成员开发的静态库和动态库,起初是知道使用LIBS变量在在.pro文件中指定需要包含的库,但是实际使用的时候却遇到很大麻烦,但其实确实是因为自己看官方文档不太用心造成的. 下面 ...

  8. 解读MT7620A上的DTS文件

    DTS文件,即Device Tree Source,是某些芯片(在Openwrt的target/linux/中,至少ramips,lantiq和BRCM有此文件)用于描述硬件设备资源的文件.此文件是驱 ...

  9. apply 判定变量类型

    js 数据类型 6大类:object ,undefined,boolean,string,number,null,但是有时候我们经常要更准确的判断,比如,是数组,还是单例... 那么就用apply吧, ...

  10. 【揭秘】什么是不对称秘钥和CA证书

    密钥交换简单的说就是利用非对称加密算法来加密对称密钥保证传输的安全性,之后用对称密钥来加密数据. ★方案1--单纯用"对称加密算法"的可行性 首先简单阐述一下,"单纯用对 ...