[bzoj4378] [POI2015]Logistyka
2016-03-23 14:24
405 查看
离线+树状数组。。
对于某个询问(S次,每次选出C个数),数列中每个数最多被减S次,只要判断(C- (数列中>=S的数个数))*S是否小于等于(数列中<S的数的和)就好了。
或者说。。把数列中>=S的数都变成S后,求一下总和是否大于等于S*C。。。
因为数字可能很大所以离线后hash一发。
网上的奇怪证明都是什么鬼。。
View Code
对于某个询问(S次,每次选出C个数),数列中每个数最多被减S次,只要判断(C- (数列中>=S的数个数))*S是否小于等于(数列中<S的数的和)就好了。
或者说。。把数列中>=S的数都变成S后,求一下总和是否大于等于S*C。。。
因为数字可能很大所以离线后hash一发。
网上的奇怪证明都是什么鬼。。
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define ll long long using namespace std; const int maxn=1000233; struct zs{ int id,v; }b[maxn];int cnt; struct ask{ bool id;int x,y; }q[maxn]; int mp[maxn],t[maxn],c[maxn]; ll sm[maxn],sum; int i,j,k,n,m,num; int ra;char rx; inline int read(){ rx=getchar(),ra=0; while(rx<'0'||rx>'9')rx=getchar(); while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra; } inline void add(int x){ // printf("add %d\n",x); for(int i=x;i<=cnt;i+=i&-i)t[i]++,sm[i]+=c[x]; } inline void del(int x){ for(int i=x;i<=cnt;i+=i&-i)t[i]--,sm[i]-=c[x]; } inline void query(int x,int &num,ll &sum){ num=sum=0; for(int i=x;i;i-=i&-i)num+=t[i],sum+=sm[i]; } bool cmp(zs a,zs b){return a.v<b.v;} int main(){ n=read(),m=read();char id; for(i=1;i<=m;i++){ for(id=getchar();id<'A'||id>'Z';id=getchar()); q[i].id=id=='U'; if(id=='U')q[i].x=read(),q[i].y=read(); else q[i].x=read(),q[i].y=read(); b[i].v=q[i].y,b[i].id=i; } sort(b+1,b+1+m,cmp); for(i=1;i<=m;i++){ if(b[i].v!=b[i-1].v||i==1)c[++cnt]=b[i].v; q[b[i].id].y=cnt; } int n1=0; for(i=1;i<=m;i++){ // printf("%d %d %d\n",q[i].id,q[i].x,q[i].y); if(q[i].id){ // all-=c[mp[q[i].x]],all+=c[q[i].y]; if(mp[q[i].x])del(mp[q[i].x]);else n1++; add(q[i].y),mp[q[i].x]=q[i].y; }else{ query(q[i].y,num,sum);num=n1-num;//printf("number>=%d:%d rest:%lld\n",c[q[i].y],num,sum); if(sum>=(ll)c[q[i].y]*(q[i].x-num))puts("TAK");else puts("NIE"); } } return 0; }
View Code
相关文章推荐
- Xcode7 使用NSURLSession发送HTTP请求的问题
- 安卓中常见的控件
- Django静态文件配置
- IntentService的使用与优点
- C语言的正则表达式 regex
- C语言中#define用法总结
- PANDA pipeline的安装与使用-安装(2)利用Linux虚拟机进行安装
- Fragment详解(一):Fragment简介
- SVN locked解决
- Excel 2010同时打开多个独立的窗口
- delphi 操作文件
- [疯狂Java]TCP:TCP协议的概念、Socket通信、超时等待
- Oracle11.2.0.4.5升级psu至11.2.0.4.160119的注意事项
- Android学习之网络请求库Retrofit2
- spring mvc
- 动画效果收录
- jquery获得图片的真实大小
- C++第二次作业
- VS2013程序打包部署详细图解
- Objective-C和Swift混编的一些经验