题目传送门

Meteors

格式难调,题面就不妨放了。


  分析:

  一道整体二分的练手题。

  就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问。另外,博主代码打得太丑,常数贼大,不建议照这么打。。。

  Code:

//It is made by HolseLee on 5th Oct 2018
//Luogu.org P3527
#include<bits/stdc++.h>
#define N 300007
using namespace std; typedef long long ll;
int n,m,K,cnt,ans[N];
ll c[N],a[N];
vector<int>G[N];
struct Node {
int x,y,pos,type; ll k;
}q[N<<],q1[N],q2[N]; inline ll read()
{
ll x=; char ch=getchar(); bool flag=false;
while( ch<'' || ch>'' ) {
if( ch=='-' ) flag=true; ch=getchar();
}
while( ch>='' && ch<='' ) {
x=(x<<)+(x<<)+(ch^); ch=getchar();
}
return flag ? -x : x;
} void print(int x)
{
if( x> ) print(x/);
putchar(x%+'');
} inline int lowbit(int x)
{
return x&(-x);
} inline void add(int pos,ll x)
{
for(; pos<=m; pos+=lowbit(pos)) c[pos]+=x;
} inline ll quary(int pos)
{
ll ret=;
for(; pos>; pos-=lowbit(pos)) ret+=c[pos];
return ret;
} void solve(int l,int r,int L,int R)
{
if( l>r || L>R ) return;
if( l==r ) {
for(int i=L; i<=R; ++i)
if( q[i].type== ) ans[q[i].pos]=l;
return;
}
int mid=(l+r)>>, cnt1=, cnt2=;
for(int i=L; i<=R; ++i)
if( q[i].type== ) {
ll tmp=;
for(int j=; j<G[q[i].pos].size(); ++j) {
tmp+=quary(G[q[i].pos][j]);
if( tmp>q[i].k ) break;
}
if( tmp>=q[i].k ) q1[++cnt1]=q[i];
else q[i].k-=tmp,q2[++cnt2]=q[i];
} else {
if( q[i].pos<=mid ) {
if( q[i].type== ) {
add(q[i].x,q[i].k), add(q[i].y+,-q[i].k);
} else {
add(,q[i].k), add(q[i].y+,-q[i].k), add(q[i].x,q[i].k);
}
q1[++cnt1]=q[i];
} else {
q2[++cnt2]=q[i];
}
}
for(int i=; i<=cnt1; ++i) {
if( q1[i].type== ) continue;
if( q1[i].type== ){
add(q1[i].x,-q1[i].k), add(q1[i].y+,q1[i].k);
} else {
add(,-q1[i].k), add(q1[i].y+,q1[i].k), add(q1[i].x,-q1[i].k);
}
}
for(int i=; i<=cnt1; ++i) q[L+i-]=q1[i];
for(int i=; i<=cnt2; ++i) q[L+cnt1+i-]=q2[i];
solve(l,mid,L,L+cnt1-); solve(mid+,r,L+cnt1,R);
} int main()
{
n=read(), m=read();
int x,y; ll z;
for(int i=; i<=m; ++i) G[read()].push_back(i);
for(int i=; i<=n; ++i) a[i]=read();
K=read();
for(int i=; i<=K; ++i) {
x=read(), y=read(), z=read();
q[++cnt].x=x, q[cnt].y=y, q[cnt].k=z; q[cnt].pos=i;
if( y>=x ) q[cnt].type=; else q[cnt].type=;
}
for(int i=; i<=n; ++i)
q[++cnt].pos=i, q[cnt].k=a[i], q[cnt].type=;
solve(,K+,,cnt);
for(int i=; i<=n; ++i)
if( ans[i]!=K+ ) print(ans[i]),putchar('\n');
else puts("NIE");
return ;
}

洛谷P3527 [POI2011]MET-Meteors [整体二分]的更多相关文章

  1. 洛谷P3527 [POI2011]MET-Meteors(整体二分)

    传送门 整体二分 先二分一个答案,判断是否可行,把可行的全都扔到左边,不可行的扔到右边 判断是否可行用树状数组就行 具体细节看代码好了 整体二分细节真多……也可能是我大脑已经退化了? //minamo ...

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

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

  3. 洛谷 P3527 [POI2011]MET-Meteors 解题报告

    P3527 [POI2011]MET-Meteors 题意翻译 \(\tt{Byteotian \ Interstellar \ Union}\)有\(N\)个成员国.现在它发现了一颗新的星球,这颗星 ...

  4. 【BZOJ2527】【POI2011】Meteors [整体二分]

    Meteors Time Limit: 60 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...

  5. 洛谷P3242 接水果 [HNOI2015] 整体二分

    正解:整体二分+树状数组 解题报告: 传送门! 题目还是大概解释下?虽然其实是看得懂的来着,,, 大概就是说给一棵树.给定一些询问,每个询问都是说在两个点之间的路径上的子路径的第k大是什么 然后看到这 ...

  6. 洛谷P3250 [HNOI2016]网络(整体二分+树状数组+树剖)

    传送门 据说正解是树剖套堆???然而代码看着稍微有那么一点点长…… 考虑一下整体二分,设当前二分到的答案为$mid$,如果所有大于$mid$的边都经过当前点$x$,那么此时$x$的答案必定小于等于$m ...

  7. 洛谷P3513 [POI2011]KON-Conspiracy

    洛谷P3513 [POI2011]KON-Conspiracy 题目描述 Byteotia的领土被占领了,国王Byteasar正在打算组织秘密抵抗运动. 国王需要选一些人来进行这场运动,而这些人被分为 ...

  8. 洛谷P3527 MET-Meteors [POI2011] 整体二分

    正解:整体二分 解题报告: 传送门! 还有个双倍经验!(明明是一样的题目为什么你们一个紫一个黑啊喂! 这题首先要想到可以二分嘛,然后看到多组询问肯定就整体二分鸭 那就是基本套路啊,发现是区间修改单点查 ...

  9. 2527: [Poi2011]Meteors[整体二分]

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 1528  Solved: 556 [Submit][S ...

随机推荐

  1. iscroll demo

    下面是自己找网上资料写的一个小demo,基础的属性和方法都有用到,但是用法还不是很标准,github上的demo用法很标准,外面一个wrapper,里面还得有一个scroller,如果要做跑马灯效果还 ...

  2. soj1090.Highways

    1090. Highways Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description The island nation of ...

  3. 阿里云的OCS缓存机制

    OCS简介 OCS( Open Cache Service)为分布式高速缓存服务,主要实现热点数据的快速响应: OCS支持Key/Value的数据结构,兼容memcachebinary protoco ...

  4. 【AtCoder Regular Contest 080E】Young Maids [堆][线段树]

    Young Maids Time Limit: 50 Sec  Memory Limit: 512 MB Description 给定一个排列,每次选出相邻的两个放在队头,要求字典序最小. Input ...

  5. 爬虫笔记之JS检测浏览器开发者工具是否打开

    在某些情况下我们需要检测当前用户是否打开了浏览器开发者工具,比如前端爬虫检测,如果检测到用户打开了控制台就认为是潜在的爬虫用户,再通过其它策略对其进行处理.本篇文章主要讲述几种前端JS检测开发者工具是 ...

  6. [转]closed-form solution (闭合解/解析解)和数值解的理解

    参考整理自:http://hi.baidu.com/cjb366/item/7290773b2d2eb9f2a9842873 closed-form solution :一般翻译为闭合解/解析解.这一 ...

  7. .net开源框架开源类库(整理)

    源:http://www.cnblogs.com/chinanetwind/p/3715809.html 常用库 Json.NET https://github.com/JamesNK/Newtons ...

  8. mysql中间件 -> Atlas简介&安装

    Atlas简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上, ...

  9. 一、Vue入门

    vue官网:https://cn.vuejs.org/ 学习路线:VueJs2.0建议学习路线 在浏览器上安装 Vue Devtools工具 1.vue入门 <script src=" ...

  10. Web Api - HttpMessageHandler 学习

    参考: 1.http://www.cnblogs.com/chenboyi081/p/4995252.html 2.http://www.cnblogs.com/r01cn/archive/2012/ ...