luogu P3527 [POI2011]MET-Meteors

大意

就是给你一个长度为m的环,环上每个点属于一个国家,一共有n个国家,每次会有陨石掉落在环上的一段点上,每个国家都想要收集一定的陨石,问每个国家最少在第几次陨石掉落时就收集够了

题解

整体二分裸题
首先二分所有的询问,然后把满足要求的丢一边,不满足的丢另一边,然后继续二分下去即可


#include<bits/stdc++.h>
#define lowbit(x) (x & -x)
#define int long long
#define N 1000005
using namespace std;
struct A{int nd, id;
}b[N], p1[N], p2[N];
struct Q{int l, r, x;
}q[N];
int tree[N];
vector<int> g[N];
void update(int x, int y){for(;x < N; x += lowbit(x)) tree[x] += y;
}
int query(int x){int ret = 0;for(; x; x -= lowbit(x)) ret += tree[x];return ret;
}
int ans[N], a[N], n, m, tot;
void ef(int l, int r, int x, int y){//l, r是二分的询问的区间,x,y表示的是b[x...y]的国家if(x > y) return;if(l == r){for(int i = x; i <= y; i ++) ans[b[i].id] = l;return;}int len1 = 0 , len2 = 0;int mid = (l + r) >> 1;for(int i = l; i <= mid; i ++) update(q[i].l, q[i].x), update(q[i].r + 1, - q[i].x);//二分陨石从l..midfor(int i = x; i <= y; i ++){int tmp = 0;for(int j = 0; j < g[b[i].id].size(); j ++){tmp += query(g[b[i].id][j]) + query(g[b[i].id][j] + m);//把每个国家可获得的陨石数统计下来if(tmp >= b[i].nd) break;//如果过了就直接退出,可以减枝还可以防止爆long long}if(tmp >= b[i].nd) p1[++ len1] = b[i];//满足就丢p1else p2[++ len2] = b[i], p2[len2].nd -= tmp;//不满足就丢p2,注意要减去l...mid陨石坠落对它的贡献}for(int i = l; i <= mid; i ++) update(q[i].l, - q[i].x), update(q[i].r + 1, q[i].x);//清空树状数组for(int i = 1; i <= len1; i ++) b[i + x - 1] = p1[i];for(int i = 1; i <= len2; i ++) b[i + x + len1 - 1] = p2[i];//合并到b中ef(l, mid, x, x + len1 -1), ef(mid + 1, r, x + len1, y);//继续二分
}
signed main(){scanf("%lld%lld", &n, &m);for(int i = 1; i <= m; i ++) scanf("%lld", &a[i]), g[a[i]].push_back(i);for(int i = 1; i <= n; i ++) scanf("%lld", &b[i].nd), b[i].id = i;scanf("%lld", &tot);for(int i = 1; i <= tot; i ++){scanf("%lld%lld%lld", &q[i].l, &q[i].r, &q[i].x);if(q[i].l > q[i].r) q[i].r += m;//处理环的情况}q[++ tot].l = 1, q[tot].r = n * 2, q[tot].x = 1e16; //加一个来判断是否不能满足要求ef(1, tot, 1, n);for(int i = 1; i <= n; i ++) if(ans[i] != tot) printf("%lld\n", ans[i]); else printf("NIE\n");    return 0;
}

luogu P3527 [POI2011]MET-Meteors相关推荐

  1. [洛谷P3527] [POI2011]MET-Meteors

    洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...

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

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

  3. Luogu P3521 [POI2011]ROT-Tree Rotations

    题目链接 \(Click\) \(Here\) 线段树合并,没想到学起来意外的很简单,一般合并权值线段树. 建树方法和主席树一致,即动态开点.合并方法类似于\(FHQ\)的合并,就是把两棵树的信息整合 ...

  4. bzoj2527: [Poi2011]Meteors

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

  5. bzoj 2527: [Poi2011]Meteors

    昨天写了一晚,越写复杂度越感觉不对,早上一想果然是假的. (这里n,m,k我就不区分了) 首先一个城市的询问可以很容易的二分 check用树状数组维护区间(区间修改,单点查询的那种) 一次是\(O(n ...

  6. 【数学一本通 第一章】SEJ-Strongbox [LUOGU] [POI2011]

    密码 [SEJ-Strongbox ] 题目链接:密码 [SEJ-Strongbox ] (这是一道数论蓝题,想了好长时间啊~~) [题目大意] 有一个密码箱,0到n-1中的某些整数是它的密码.且满足 ...

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

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

  8. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

  9. [Luogu] 选学霸

    https://www.luogu.org/problemnew/show/P2170 并查集+DP #include <iostream> #include <cstring> ...

最新文章

  1. 荣耀9将要回归金属材质,网友直呼:看着就很贵
  2. 【集合论】二元关系 ( 定义域 | 值域 | 域 | 逆运算 | 逆序合成运算 | 限制 | 像 | 单根 | 单值 | 合成运算的性质 )
  3. 两个排序数组的中位数(4.Median of Two Sorted Arrays)
  4. Android init.rc文件解析过程详解(三)
  5. Oracle的FIXED_DATE参数
  6. numpy.ndarray.reshape()torch.Tensor.reshape()与numpy.ndarray.view()torch.Tensor.view()的区别(view_as())
  7. u-boot移植第三弹——移植2013.10u-boot到RealARM210 cortex-A8开发板(支持moviNAND_Fusing_Tool_v2.0)
  8. 手机安装python的步骤_小白入门:Python安装的10个步骤,极其细致!!
  9. 掌握 React 与 React Native
  10. 前端学习(1924)vue之电商管理系统电商系统之权限的渲染方式
  11. 通用usb集线器驱动_多口充电、高速传输——ORICO晶锐系列7口集线器测评
  12. 无法在WEB服务器上启动调试,Web 服务器配置不正确 解决
  13. 《Windows 系列》- 修改hsot
  14. windowswps怎么以文件形式发送_wps怎么以文件形式分享
  15. (转载)C# Process.Kill() 拒绝访问(Access Denied) 的解决方案
  16. POJ 1703 Find them, Catch them 并查集
  17. 定时器的实现原理 不消耗cpu_一直在使用JDK动态代理, 不明白原理如何实现?
  18. 使用JSON实现分页
  19. 算法:统计n以内素数个数--埃筛法
  20. shopex mysql 数据库服务器_[日记] shopex转移以及MySql简单操作命令

热门文章

  1. .rvm/gems/ruby-2.4.1@global/gems/cocoapods-1.5.0/lib/cocoapods/executable.rb:89: warning: Insecure
  2. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(三)技能标签(Ability Tags)...
  3. 【计算机英语】期末复习笔记
  4. 天津大学软件学院 研究生学位申请的学术成果要求
  5. 软件分类和软件测试工作流程
  6. 创业型公司,你要不要去?
  7. Gartner发布2022年中国智慧城市和可持续发展技术成熟度曲线
  8. SUNDIALS中的RTOL和ATOL
  9. 数据挖掘与机器学习——数据挖掘概述
  10. php获取index.php,index.php · 阿彪/PHP去抖音水印解析-非接口(获取抖音无水印URL地址) - Gitee.com...