昨天写了一晚,越写复杂度越感觉不对,早上一想果然是假的。

(这里n,m,k我就不区分了)

首先一个城市的询问可以很容易的二分

check用树状数组维护区间(区间修改,单点查询的那种)

一次是\(O(nlog^2n)\)

n次就是\(O(n^2log^2n)\)

但是我们check的时候都是树状数组维护,询问相同

我们就可以整体二分(顾名思义)

把区间考虑成二叉树(类似线段树的形状)

我们每一层用一遍树状数组

查询的话,一个国家用一个链表存下所在的点

因为深度是\(logn\)的

复杂度是还是差不多的\((Onlog^2n)\)

妙啊

会炸long long 及时break就好

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <utility>
#include <vector>
#define ll long long
using namespace std;
const int N = 5e5+7;
int read() {int x = 0,f = 1;char s = getchar();for(; s > '9'||s < '0'; s = getchar()) if(s == '-') f = -1;for(; s >= '0' && s <= '9'; s = getchar()) x = x * 10 + s - '0';return x * f;
}
int n, m, k;
int L[N], R[N], w[N], need[N], ans[N];
pair<int,int> erfen[N];
vector<int> hav[N];
namespace BIT {ll sum[N];void add(int id, ll ad) {for(int i = id; i <= m; i += (i&-i)) sum[i] += ad;}ll query(int id) {ll ans = 0;for(int i = id; i >= 1;i -= (i&-i)) ans += sum[i]; return ans;}void modify(int l, int r, ll ad) {add(l, ad), add(r + 1, -ad);}void clear() {memset(sum, 0, sizeof(sum));}
}
void solve() {vector<pair<int,int> > Q;for(int i = 1; i <= n; ++i)if(erfen[i].first!=k+1&&erfen[i].first <= erfen[i].second)Q.push_back(make_pair((erfen[i].first+erfen[i].second)>>1,i));if(Q.empty()) return;sort(Q.begin(), Q.end());BIT::clear();for(int i = 1, js = 0;i <= k; ++ i) {if(L[i] <= R[i]) BIT::modify(L[i], R[i], (ll)w[i]);else BIT::modify(L[i], m, w[i]), BIT::modify(1, R[i], (ll)w[i]);while(js < Q.size() && Q[js].first == i) {int id = Q[js].second;ll tmp=0;for(vector<int>::iterator it = hav[id].begin();it != hav[id].end(); ++it) {tmp += BIT::query(*it);if(tmp>=(ll)need[id]) break;}if(tmp>=(ll)need[id]) ans[id] = i,erfen[id].second = i - 1;elseerfen[id].first = i + 1;++js;}}solve();
}
int main() {//readn = read(), m = read();for(int i = 1; i <= m; ++i) {int x = read();hav[x].push_back(i);}for(int i = 1; i <= n; ++i) need[i] = read();k = read();for(int i = 1; i <= k; ++i) L[i] = read(), R[i] = read(), w[i] = read();for(int i = 1; i <= n; ++i) erfen[i].first = 1, erfen[i].second = k+1;//worksolve();//printfor(int i = 1;i <= n; ++i) {if(ans[i]) printf("%d\n", ans[i]);else puts("NIE");}return 0;
}

转载于:https://www.cnblogs.com/dsrdsr/p/10381987.html

bzoj 2527: [Poi2011]Meteors相关推荐

  1. BZOJ 2527 Meteors | 整体二分

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

  2. bzoj2527: [Poi2011]Meteors

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

  3. bzoj 2216: [Poi2011]Lightning Conductor(DP决策单调性)

    2216: [Poi2011]Lightning Conductor Time Limit: 25 Sec  Memory Limit: 64 MB Submit: 1292  Solved: 443 ...

  4. bzoj 2217 [Poi2011]Lollipop 乱搞 贪心

    2217: [Poi2011]Lollipop Time Limit: 15 Sec  Memory Limit: 64 MBSec  Special Judge Submit: 383  Solve ...

  5. BZOJ.2212.[POI2011]Tree Rotations(线段树合并)

    题目链接 \(Description\) 给定一棵n个叶子的二叉树,每个叶节点有权值(1<=ai<=n).可以任意的交换两棵子树.问最后顺序遍历树得到的叶子权值序列中,最少的逆序对数是多少 ...

  6. bzoj 2528: [Poi2011]Periodicity【kmp+构造】

    神仙构造,做不来做不来 详见:http://vfleaking.blog.163.com/blog/static/174807634201329104716122/ #include<iostr ...

  7. BZOJ 2277 Poi2011 Strongbox

    题目大意:一个集合A,包含了0~n-1这n个数.另有一个集合B,满足: 1.B是A的子集. 2.如果a.b均在B中,则(a+b)%n也在B中(a=b亦可) 给出k个数ai,前k-1个不在B中,第k个在 ...

  8. BZOJ 2277 Poi2011 Strongbox 数论

    题目大意:给定n和k个整数,求mod n加法下的群G的一个子群G',满足a[1]~a[k-1]都不在群中而a[k]在群中 首先易证G'一定是一个循环群 证明:显然若a在群中则a的逆元在群中 那么我们就 ...

  9. BZOJ 2216 Poi2011 Lightning Conductor 动态规划

    题目大意:给定一个序列aia_i,对于每一个ii求⌈max{aj+|i−j|−−−−−√}−ai⌉\lceil max\{ a_j+\sqrt{|i-j|}\}-a_i\rceil 看了题解才知道是决 ...

最新文章

  1. 内核打上yaffs2补丁遇到的问题
  2. 做好项目,从正确定义问题开始!
  3. leetcode 994. Rotting Oranges | 994. 腐烂的橘子(BFS)
  4. linux修复u盘文件系统,linux下转换U盘文件系统
  5. 丁香园 武汉 神童_杭州、武汉、成都哪个城市更适合程序员发展
  6. 【周记:距gdoi43天】
  7. 梯度下降、随机梯度下降、方差减小的梯度下降(matlab实现)
  8. python敏感词过滤replace_Serverless 实战:3 分钟实现文本敏感词过滤
  9. 深度学习福利入门到精通第二讲——AlexNet模型
  10. tde数据库加密_启用了基于透明数据加密(TDE)的地理复制的Azure SQL数据库
  11. 数据分析5大关键环节
  12. 大橡塑属于机器人板块吗_又一家制造企业逃离,在东莞怒砸10亿建总部,机器人产业也顶不住深圳的高成本了?...
  13. Javascript--闭包
  14. 未明学院:云计算热门机器学习项目来袭!收割亚马逊、阿里等一众巨头都看重的实操技能与项目经历!
  15. hp 430g8 笔记本摄像头黑屏问题解决
  16. 分页查询优化方案总结
  17. Excel VLOOKUP() 函数实现自动填充内容
  18. 一款好用的网速、内存实时显示插件----TrafficMonitor
  19. 原神抽卡模拟器(java简易版)
  20. 牛客网、赛码网javascript在线编程的输入输出

热门文章

  1. 电脑任务栏跑到右边去了_手把手教你用U盘安装Win10系统?学会了再也不用去跑电脑店了...
  2. python画十字_matplotlib绘制鼠标的十字光标的实现(内置方式)
  3. java 正则替换cdata_XML中配置正则表达式的写法
  4. Hessian Matrix
  5. java环境变量设置 重启吗_java环境变量配置,原来是这样的
  6. BertEmbedding的各种用法
  7. 李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
  8. 中心频点计算公式_5G中的频点计算及实例分析
  9. mysql学习day02
  10. 修改联通服务器密码,联通的服务器咋设置密码