https://www.luogu.org/problem/show?pid=3527
洛谷时限比较小,目前超时一个点;
正在联系kkk;
我们要求对于每一个国家,它最早完成时间;
那么我们二分完成时间,并且把答案在这个二分区间内的国家也一起进入二分;
能不用线段树就不用;
区间加法可以用前缀和实现的;

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define Ll long long
using namespace std;
const int N=300005;
struct cs{int to,nxt;}a[N];
struct cz{int l,r,v;}c[N];
int head[N],ll;
int p[N],o[N],oo[N],ans[N];
bool ok[N];
Ll f[N];
int n,m,x,t,nn;
void init(int i,int v){for(;i<=m;i+=i&-i)f[i]+=v;}
Ll outit(int i){Ll ans=0;for(;i;i-=i&-i)ans+=f[i];return ans;}
void add(int k,int kk){int l=c[k].l,r=c[k].r,v=c[k].v*kk;if(r>=l)init(l,v),init(r+1,-v);elseinit(1,v),init(r+1,-v),init(l,v);
}
void er(int L,int R,int l,int r){if(r<l)return;if(L==R){for(int i=l;i<=r;i++)ans[o[i]]=L;return;}int mid=L+R>>1;while(t<mid)add(++t, 1);//一种新的方式,感觉很牛逼 while(t>mid)add(t--,-1);for(int i=l;i<=r;i++){int x=o[i]; oo[i]=x; Ll sum=0;for(int k=head[x];k;k=a[k].nxt){sum+=outit(a[k].to);if(sum>=p[x])break;}if(sum>=p[x])ok[x]=1;else ok[x]=0;}int top=l-1,sum=0;for(int i=l;i<=r;i++)if(ok[oo[i]])o[++top]=oo[i];for(int i=l;i<=r;i++)if(!ok[oo[i]])o[++sum+top]=oo[i];er(L,mid  ,l,top  );er(mid+1,R,top+1,r);
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d",&x);a[++ll].to=i;a[ll].nxt=head[x];head[x]=ll;}for(int i=1;i<=n;i++)scanf("%d",&p[i]);scanf("%d",&nn);for(int i=1;i<=nn;i++)scanf("%d%d%d",&c[i].l,&c[i].r,&c[i].v);c[++nn].l=1;c[nn].r=m;c[nn].v=1e9;for(int i=1;i<=n;i++)o[i]=i;er(1,nn,1,n);for(int i=1;i<=n;i++)if(ans[i]==nn)printf("NIE\n");else printf("%d\n",ans[i]);
}

转载于:https://www.cnblogs.com/largecube233/p/6797830.html

整体二分——[Poi2011]Meteors相关推荐

  1. [bzoj2527][Poi2011]Meteors_整体二分_树状数组

    Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ...

  2. BZOJ 2527 Meteors | 整体二分

    BZOJ 2527 Meteors 题意 一个圆环上有m个位置,编号为1~m,分别属于n个国家. 有k个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国 ...

  3. P3527 [POI2011]MET-Meteors 整体二分 + 树状数组

    洛谷 题意: 思路: 考虑整体二分前,一定要思考一下直接二分怎么做.显然对每个城市,当<pos<pos<pos的时候收集不够足够的陨石,>=pos>=pos>=po ...

  4. BZOJ.2161. 布娃娃【整体二分】

    传送门 NNN 个区间记为 [l,r][l,r][l,r]形式,魅力值,记为CiC_iCi​形式 NNN 个耐力值,记为 PiP_iPi​形式 求覆盖PiP_iPi​的区间内,魅力值第iii大是多少 ...

  5. bzoj2527: [Poi2011]Meteors

    整体二分天数,然后用树状数组记录每个点采集点收集的陨石个数,暴力计算对于某个国家,是否达到要求,因为在计算过程中可能爆LL,所以边加边判. 我怎么老是把m打成n啊 #include<cstdio ...

  6. SP3946 MKTHNUM - K-th Number(整体二分)

    思路 整体二分的板子题,没什么思路好说 代码 #include <cstdio> #include <algorithm> #include <cstring> u ...

  7. BZOJ2738 矩阵乘法 【整体二分 + BIT】

    题目链接 BZOJ2738 题解 将矩阵中的位置取出来按权值排序 直接整体二分 + 二维BIT即可 #include<algorithm> #include<iostream> ...

  8. 【BZOJ2738】矩阵乘法 [整体二分][树状数组]

    矩阵乘法 Time Limit: 20 Sec  Memory Limit: 256 MB [Submit][Status][Discuss] Description 给你一个N*N的矩阵,不用算矩阵 ...

  9. 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分

    题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...

  10. 【BZOJ1146】【CTSC2008】网络管理 [整体二分]

    网络管理 Time Limit: 50 Sec  Memory Limit: 162 MB [Submit][Status][Discuss] Description M公司是一个非常庞大的跨国公司, ...

最新文章

  1. Qt 使用#define+qDebug()输出调试信息
  2. 编写Web前端代码的注意事项
  3. Python表示不甘心,汤姆大叔送书,Python抢书之毫秒级跟进--获取服务器时间
  4. c语言类静态数据成员函数,鸡啄米:C++编程入门系列之二十一(C++程序设计必知:类的静态成员)...
  5. BZOJ 3238 【AHOI2013】 差异
  6. 华云三维:CrownCAD(皇冠CAD)用户注册量突破5万
  7. 快速健身---马步站桩
  8. 总结:linux运维常用命令
  9. VulnHub渗透测试实战靶场 - SICKOS: 1.1
  10. 基于网站API的爬虫
  11. JAVA音程_大三度和小三度
  12. 逆向,真是一件苦差事
  13. python 循环写文件_循环-读写文件-字符编码
  14. 华为mate40pro+和华为p40pro+哪个好
  15. layui表格点击按钮下方新增加空白行
  16. Swiper 轮播插件
  17. hydra(海德拉)暴力破解工具
  18. windowsXP服务详解
  19. Java WEB开发实战 之 第二部分:Web应用基础知识【私塾在线原创】
  20. 关于产品的一些思考——阿里巴巴之来往

热门文章

  1. 【渝粤题库】陕西师范大学164105 物流管理学 作业(高起专)
  2. 【渝粤教育】广东开放大学 个人与团队管理 形成性考核 (47)
  3. 详解没有dSYM文件 如何解析iOS崩溃日志
  4. JavaScript垃圾收集-标记清除和引用计数
  5. java ----一个函数传回多个值的总结
  6. [转] 如何提取word图片
  7. 深入理解 Python 异步编程(上)
  8. oracle SQL查询
  9. 在MFC中使用GDI+的一般方法,以VC6.0编译器为例
  10. 继承(1)----《.NET 2.0面向对象编程揭秘 》学习