[BZOJ2527]Meteors
整体二分挺好玩的...学一发
这个询问显然是可以二分的,但每次都二分就会T爆,所以我们有了“整体”二分
每次处理一些询问,要求这些询问的答案一定在$[l,r]$中
先把$l$到$mid$的操作实施,那么当前TAK的询问答案一定在$[l,mid]$中,当前NIE的询问答案一定在$[mid+1,r]$中,对答案为$[mid+1,r]$的那些询问加上$[l,mid]$的修改所产生的影响后分治处理即可
开始时加上一个操作$(1,m,+\infty)$就可以处理NIE的情况了
直接用线段树会被卡常,因为是区间加,单点询问,所以差分后用树状数组做即可
#include<stdio.h> #include<vector> using namespace std; typedef long long ll; const int inf=1000000000; struct rain{ int l,r,d; rain(int a=0,int b=0,int c=0){l=a;r=b;d=c;} }R[300010]; vector<int>s[300010]; vector<int>::iterator it; int p[300010],q[300010],ans[300010],ql[300010],qr[300010],n,m; ll d[300010],las[300010]; int lowbit(int x){return x&-x;} void add(int x,int v){ while(x<=m){ d[x]+=v; x+=lowbit(x); } } void add(int l,int r,int v){ add(l,v); add(r+1,-v); } ll query(int x){ ll s=0; while(x){ s+=d[x]; x-=lowbit(x); } return s; } void solve(int h,int t,int l,int r){ if(h>t)return; int i,mid,cl,cr; ll tmp; if(l==r){ for(i=h;i<=t;i++)ans[q[i]]=l; return; } mid=(l+r)>>1; for(i=l;i<=mid;i++){ if(R[i].l<=R[i].r) add(R[i].l,R[i].r,R[i].d); else{ add(R[i].l,m,R[i].d); add(1,R[i].r,R[i].d); } } cl=cr=0; for(i=h;i<=t;i++){ tmp=0; for(it=s[q[i]].begin();it!=s[q[i]].end();it++){ tmp+=query(*it); if(tmp+las[q[i]]>=p[q[i]])break; } if(tmp+las[q[i]]>=p[q[i]]) ql[++cl]=q[i]; else{ las[q[i]]+=tmp; qr[++cr]=q[i]; } } for(i=1;i<=cl;i++)q[h+i-1]=ql[i]; for(i=1;i<=cr;i++)q[h+cl+i-1]=qr[i]; for(i=l;i<=mid;i++){ if(R[i].l<=R[i].r) add(R[i].l,R[i].r,-R[i].d); else{ add(R[i].l,m,-R[i].d); add(1,R[i].r,-R[i].d); } } solve(h,h+cl-1,l,mid); solve(h+cl,t,mid+1,r); } int main(){ int i,x,k; scanf("%d%d",&n,&m); for(i=1;i<=m;i++){ scanf("%d",&x); s[x].push_back(i); } for(i=1;i<=n;i++)scanf("%d",p+i); scanf("%d",&k); for(i=1;i<=k;i++)scanf("%d%d%d",&R[i].l,&R[i].r,&R[i].d); R[++k]=rain(1,m,inf); for(i=1;i<=n;i++)q[i]=i; solve(1,n,1,k); for(i=1;i<=n;i++){ if(ans[i]==k) puts("NIE"); else printf("%d\n",ans[i]); } }
[BZOJ2527]Meteors的更多相关文章
- 【BZOJ2527】[Poi2011]Meteors 整体二分
[BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...
- 【bzoj2527】[Poi2011]Meteors(树状数组(单点查询,区间修改)+整体二分)
[bzoj2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...
- BZOJ2527: [Poi2011]Meteors
补一发题解.. 整体二分这个东西,一开始感觉复杂度不是很靠谱的样子 问了po姐姐,说套主定理硬干.. #include<bits/stdc++.h> #define ll long lon ...
- 【BZOJ-2527】Meteors 整体二分 + 树状数组
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ...
- BZOJ2527 [Poi2011]Meteors 整体二分 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...
- 【BZOJ2527】【POI2011】Meteors [整体二分]
Meteors Time Limit: 60 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...
- BZOJ2527[Poi2011]Meteors——整体二分+树状数组
题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...
- bzoj千题计划149:bzoj2527: [Poi2011]Meteors
http://www.lydsy.com/JudgeOnline/problem.php?id=2527 整体二分 区间加,单点查,树状数组维护差分序列 注意 累积可能会爆long long,所以一满 ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
随机推荐
- HTML5用canvas绘制五星红旗
在HTML5一览中,我们提到html 5被冠以很多高帽,其中最高的一顶.备受争议的就是"Flash杀手".IT评论界老喜欢用这个词了,杀手无处不在.不管是不是杀手,HTML 5引进 ...
- Codeforces Round #524 (Div. 2) B. Margarite and the best present
B. Margarite and the best present 题目链接:https://codeforces.com/contest/1080/problem/B 题意: 给出一个数列:an=( ...
- Different Integers 牛客多校第一场只会签到题
Given a sequence of integers a1, a2, ..., an and q pairs of integers (l1, r1), (l2, r2), ..., (lq, r ...
- django自己搭建的博客
1.博客地址: http://jiangtao4.pythonanywhere.com/ 2.后台可以发布笔记,可以翻页,数据存在MySQL里面 3.GitHub地址: https://github. ...
- mysql__索引的设计和使用
索引的设计和使用 1 索引概述 MySIAM和InnoDB存储引擎的表默认创建的都是BTREE索引,MySQL目前不支持函数索引,但是支持前缀索引.还支持全文本索引,但是只有MySIAM(5.0开始) ...
- barba 页面渲染
a.css html, body { padding:; margin: 0 } ol.menu { width: 100%; text-align: left; padding: 0 !import ...
- leetcode-501. Find Mode in Binary Search Tree
Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...
- 51nod 1076 2条不相交的路径
给出一个无向图G的顶点V和边E.进行Q次查询,查询从G的某个顶点V[s]到另一个顶点V[t],是否存在2条不相交的路径.(两条路径不经过相同的边) (注,无向图中不存在重边,也就是说确定起点和终点 ...
- [POJ2068]Nim解题报告
Let's play a traditional game Nim. You and I are seated across a table and we have a hundred stones ...
- Runtime类 调用windows程序。
import java.io.*; public class webcyz { /** * @param args */ public static void main(String[] args) ...