线段树肯定会 TLE 的,必须要用树状数组.

Code:

// luogu-judger-enable-o2
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cctype>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 300009
#define ll long long
using namespace std;
vector<int>G[maxn];
int n,m,k,cnt[maxn],left[maxn<<1],right[maxn<<1],que[maxn],result[maxn];
int tl[maxn],tr[maxn];
int current[maxn],cost[maxn],w[maxn<<1];
inline int read()
{
int k=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-')f=-1;
for(;isdigit(c);c=getchar()) k=k*10+c-'0';return f*k;
}
struct Segment_Tree{
ll sumv[maxn<<2],lazy[maxn<<2];
#define lson (o<<1)
#define rson (o<<1)|1
void mark(int l,int r,int o,int delta)
{
sumv[o]+=delta*(r-l+1);
lazy[o]+=delta;
}
int lowbit(int x){ return x&(-x); }
void update(int l,int r,int L,int R,int o,int k){
while(L<=r) sumv[L]+=k,L+=lowbit(L);
++R;
while(R<=r) sumv[R]-=k,R+=lowbit(R);
}
ll query(int l,int r,int pos,int pos2,int o){
ll sum=0;
while(pos>0) sum+=sumv[pos],pos-=lowbit(pos);
return sum;
}
}tree;
void solve(int x,int y,int l,int r){
if(x>y||l>r) return;
if(l==r){
for(int i=x;i<=y;++i) result[que[i]]=l;
return;
}
int mid=(l+r)>>1,p=0,q=0,qcnt;
ll s;
for(int i=l;i<=mid;++i) {
for(int cur=cnt[i-1]+1;cur<=cnt[i];++cur) {
tree.update(1,m,left[cur],right[cur],1,w[cur]);
}
}
for(int i=x;i<=y;++i){
int u=que[i];
int siz=G[u].size();
s=current[u];
for(int j=0;j<siz&&s<=(ll)cost[u];++j)
s+=tree.query(1,m,G[u][j],G[u][j],1);
if(s>=cost[u]) tl[++p]=u;
else tr[++q]=u,current[u]=s;
}
for(int i=l;i<=mid;++i)
for(int cur=cnt[i-1]+1;cur<=cnt[i];++cur)
tree.update(1,m,left[cur],right[cur],1,-w[cur]);
qcnt=x-1;
for(int i=1;i<=p;++i) que[++qcnt]=tl[i];
for(int i=1;i<=q;++i) que[++qcnt]=tr[i];
solve(x,x+p-1,l,mid),solve(x+p,y,mid+1,r);
}
int main(){
//setIO("input");
n=read(),m=read();
for(int i=1;i<=m;++i)
{
int a=read();
G[a].push_back(i);
}
for(int i=1;i<=n;++i) cost[i]=read();
k=read();
int idx=0;
for(int i=1;i<=k;++i){
int l,r,c;
l=read(),r=read(),c=read();
if(l<=r) cnt[i]=++idx,left[idx]=l,right[idx]=r,w[idx]=c;
else {
cnt[i]=++idx;
left[idx]=l,right[idx]=m,w[idx]=c;
cnt[i]=++idx;
left[idx]=1,right[idx]=r,w[idx]=c;
}
}
for(int i=1;i<=n;++i) que[i]=i;
cnt[++k]=++idx;
left[idx]=1,right[idx]=m,w[idx]=(int)1e9;
solve(1,n,1,k);
for(int i=1;i<=n;++i)
if(result[i]==k) printf("NIE\n");
else printf("%d\n",result[i]);
return 0;
}

  

[POI2011]MET-Meteors 整体二分_树状数组_卡常的更多相关文章

  1. Luogu3527 POI2011 Meteors 整体二分、树状数组、差分

    传送门 比较板子的整体二分题目,时限有点紧注意常数 整体二分的过程中将时间在\([l,mid]\)之间的流星使用树状数组+差分进行维护,然后对所有国家查看一遍并分好类,递归下去,记得消除答案在\([m ...

  2. 【BZOJ4009】[HNOI2015]接水果 DFS序+整体二分+扫描线+树状数组

    [BZOJ4009][HNOI2015]接水果 Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, ...

  3. BZOJ 4009: [HNOI2015]接水果 (整体二分+扫描线 树状数组)

    整体二分+扫描线 树状数组 具体做法看这里a CODE #include <cctype> #include <cstdio> #include <cstring> ...

  4. bzoj4009 [HNOI2015]接水果 整体二分+扫描线+树状数组+dfs序

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4009 题解 考虑怎样的情况就会有一个链覆盖另一个链. 设被覆盖的链为 \(a - b\),覆盖 ...

  5. [bzoj3529][Sdoi2014]数表_树状数组_莫比乌斯反演

    数表 bzoj-3529 Sdoi-2014 题目大意:n*m的数表,第i行第j列的数是同时整除i和j的所有自然数之和.给定a,求数表中所有不超过a的和. 注释:$1\le n,m \le 10^5$ ...

  6. [bzoj3192][JLOI2013]删除物品_树状数组_栈

    删除物品 bzoj-3192 JLOI-2013 题目大意:给你n个物品,分成2堆.所有的物品有不同的优先级.我只可以将一堆中的堆顶移动到另一个堆的堆顶.而如果当前物品是全局所有物品中优先级最高的,我 ...

  7. [Cometoj#4 E]公共子序列_贪心_树状数组_动态规划

    公共子序列 题目链接:https://cometoj.com/contest/39/problem/E?problem_id=1585 数据范围:略. 题解: 首先可以考虑知道了$1$的个数和$3$的 ...

  8. nyoj123_士兵杀敌(四)_树状数组_插线求点

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...

  9. BZOJ_5055_膜法师_树状数组+离散化

    BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...

随机推荐

  1. js中console强大之处体现在哪

    js中console强大之处体现在哪 一.总结 一句话总结:在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对conso ...

  2. 高斯滤波及高斯卷积核C++实现

    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,在图像处理的降噪.平滑中应用较多,特别是对抑制或消除服从正态分布的噪声非常有效. 高斯滤波的过程其实就是对整幅图像进行加权平均操作的过程.滤波后图像上每 ...

  3. 配置 NTP 时间服务器

    对于我们当前这种案例,主要目标是把 z01 这台服务器设置为时间服务器,剩下的 z02,z03 这两台机器同步 z01 的时间,我们需要这样做的原因是因为,整个集群架构中的时间,要保持一致. ** 检 ...

  4. tml兼容性

    于IE6下,不能识别我们的h5标签,解决办法 主动使用js创建header,footer等标签.--存在的问题,这种方法创建的元素,对于IE6来说,相当于自定义标签,而自定义标签属于 默认属于行内元素 ...

  5. APICloud关闭Key Building Resolve

    顶部菜单 --> 扩展 --> keybinding resolver --> toggle

  6. 关于zabbix 的lld的web界面的配置

    lld脚本在配置文件中例子: UserParameter=lldisk,/bin/bash /script/lldisk.sh disk_count 1.监控项 2.监控项原型

  7. 函数式编程-只用"表达式",不用"语句"()

    把函数当作普通的运算符使用. 2. 只用"表达式",不用"语句"() "表达式"(expression)是一个单纯的运算过程,总是有返回值: ...

  8. CentOS7-1810 系统DNS服务器BIND软件配置说明

    DNS的出现的历史 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和W ...

  9. MVC 单元测试xUnit初探

    对于.NET项目 Web Api的业务逻辑后台开发[特别是做Web Api接口]而言,编写单元测试用例,会极大的减轻代码帮助与运行的方式.然而使用测试框架,相对于自带的,我更加推荐是用xUnit.ne ...

  10. new 一个对象的时候发生了什么

    // 资料一: 摘抄自js高级程序设计(第三版)145页: 要创建Person的新实例,必须使用new操作符.以这种方式调用构造函数实际上会经历以下4个步骤: (1)创建一个新对象: (2)将构造函数 ...