bzoj2527: [Poi2011]Meteors
整体二分天数,然后用树状数组记录每个点采集点收集的陨石个数,暴力计算对于某个国家,是否达到要求,因为在计算过程中可能爆LL,所以边加边判。
我怎么老是把m打成n啊
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef long long LL;int n,m;LL s[310000]; int lowbit(int x){return x&-x;} void change(int x,LL k) {while(x<=m){s[x]+=k;x+=lowbit(x);} } LL getsum(int x) {LL ret=0;while(x>0){ret+=s[x];x-=lowbit(x);}return ret; }//--------------bit-------------------------int last[310000],nxt[310000];LL se[310000]; struct node {int t,x,y;LL k; }q[1100000],lq[610000],rq[610000];int len,as[310000]; LL d[310000]; void solve(int l,int r,int st,int ed) {if(st>ed)return ;if(l==r){for(int i=st;i<=ed;i++)if(q[i].k<0)as[q[i].x]=l;return ;}int mid=(l+r)/2;int lt=0,rt=0,be=ed+1;for(int i=st;i<=ed;i++){if(q[i].k>0){if(q[i].t<=mid){change(q[i].x,q[i].k);if(q[i].y<m)change(q[i].y+1,-q[i].k);lq[++lt]=q[i];}else rq[++rt]=q[i];}else {be=i;break;}}//--------------陨石雨---------------------------- for(int i=be;i<=ed;i++){LL sum=0;for(int k=last[q[i].x];k;k=nxt[k]){sum+=getsum(k);if(sum>=se[q[i].x]){lq[++lt]=q[i];break;}}if(sum<se[q[i].x]){se[q[i].x]-=sum;rq[++rt]=q[i];}}//-------------石头够没------------------- for(int i=st;i<=be-1;i++){if(q[i].k>0&&q[i].t<=mid){change(q[i].x,-q[i].k);if(q[i].y<m)change(q[i].y+1,q[i].k);}}//-----------还原树状数组------------------------ for(int i=1;i<=lt;i++)q[st+i-1]=lq[i];for(int i=1;i<=rt;i++)q[st+lt+i-1]=rq[i];solve(l,mid,st,st+lt-1);solve(mid+1,r,st+lt,ed); }int main() {freopen("meteors.in","r",stdin);freopen("meteors.out","w",stdout);scanf("%d%d",&n,&m);int x; memset(last,0,sizeof(last));for(int i=1;i<=m;i++)scanf("%d",&x), nxt[i]=last[x], last[x]=i;for(int i=1;i<=n;i++)scanf("%lld",&se[i]);int Q,l,r;LL k;len=0;scanf("%d",&Q);for(int i=1;i<=Q;i++){scanf("%d%d%lld",&l,&r,&k);if(l<=r){len++;q[len].t=i;q[len].x=l;q[len].y=r;q[len].k=k;}else{len++;q[len].t=i;q[len].x=l;q[len].y=m;q[len].k=k;len++;q[len].t=i;q[len].x=1;q[len].y=r;q[len].k=k;}}for(int i=1;i<=n;i++)q[++len].k=-1, q[len].x=i;memset(d,0,sizeof(d));solve(1,Q+1,1,len);for(int i=1;i<=n;i++)if(as[i]==Q+1)printf("NIE\n");else printf("%d\n",as[i]);return 0; }
转载于:https://www.cnblogs.com/AKCqhzdy/p/9446738.html
bzoj2527: [Poi2011]Meteors相关推荐
- [bzoj2527][Poi2011]Meteors_整体二分_树状数组
Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ...
- bzoj 2527: [Poi2011]Meteors
昨天写了一晚,越写复杂度越感觉不对,早上一想果然是假的. (这里n,m,k我就不区分了) 首先一个城市的询问可以很容易的二分 check用树状数组维护区间(区间修改,单点查询的那种) 一次是\(O(n ...
- BZOJ.2161. 布娃娃【整体二分】
传送门 NNN 个区间记为 [l,r][l,r][l,r]形式,魅力值,记为CiC_iCi形式 NNN 个耐力值,记为 PiP_iPi形式 求覆盖PiP_iPi的区间内,魅力值第iii大是多少 ...
- [颓废史]蒟蒻的刷题记录
QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...
- [BZOJ2527]Meteors
整体二分挺好玩的...学一发 这个询问显然是可以二分的,但每次都二分就会T爆,所以我们有了"整体"二分 每次处理一些询问,要求这些询问的答案一定在$[l,r]$中 先把$l$到$m ...
- BZOJ 2527 Meteors | 整体二分
BZOJ 2527 Meteors 题意 一个圆环上有m个位置,编号为1~m,分别属于n个国家. 有k个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国 ...
- [bzoj2213][Poi2011]Difference_动态规划
Difference bzoj-2213 Poi-2011 题目大意:已知一个长度为n的由小写字母组成的字符串,求其中连续的一段,满足该段中出现最多的字母出现的个数减去该段中出现最少的字母出现的个数最 ...
- 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告
P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...
- bzoj 2216: [Poi2011]Lightning Conductor(DP决策单调性)
2216: [Poi2011]Lightning Conductor Time Limit: 25 Sec Memory Limit: 64 MB Submit: 1292 Solved: 443 ...
最新文章
- 腾讯AI Lab开源业内最大规模多标签图像数据集(附下载地址)
- KMP算法具体解释(转)
- 计算机专业读mba,计算机专业的学生适合读MBA吗MBA考试_MBA-教育宝
- busybox(二)编译
- vue +element 导出多级表头(标题)
- python快速排序函数_两种方法在Python中实现快速排序
- linux命令行 teamview,linux centos 命令行 安装 teamviewer 启动 停止
- Digi Digimesh无线自组网协议和模块介绍
- 二人行必有我师,探秘复旦大学EMBA2019级同侪私董会
- C语言 打地鼠游戏 超级详解,各个函数与算法,设计思路与流程
- 域自适应(Domain Adaptation)简介
- 【odoo15】自定义一个kanban视图
- 【原创】PHP扩展开发入门
- 网管员必看:三款常见网管工具的对比
- TreeMap实现原理 红黑树
- Java小型项目:购物车小程序
- 微软2012年4月最有价值专家(MVP)名单 51CTO十四位用户当选
- java security 详解_Spring Security Remember me使用及原理详解
- PowerApps教程09-下拉列表以及联动筛选
- 微型计算机原理存储器寻址,微机原理存储器部分 微型计算机原理及应用教材.ppt...
热门文章
- SFB 项目经验-03-共存迁移-Lync 2013-TO-SFB 2015-完成
- Tungsten Replicator 多环境复制工具安装方法
- 【黑金视频连载】FPGA NIOSII视频教程(12)--时间戳定时器实验
- [JavaScript]牛人的JS是怎么玩的
- 初识FPGA CLB之LUT实现逻辑函数
- BIOS MCSDK 2.0 User Guide 示例学习
- vivado----fpga硬件调试 (二)----mark_debug
- 编程珠玑第九章——习题
- C++两个队列实现一个栈
- 数组公式基本功修炼之数组扩充