[扫描线 线段树] BZOJ 2161 布娃娃
来源:互联网 发布:linux 软件 语言 中文 编辑:程序博客网 时间:2024/06/12 00:59
这读入真让人蛋疼
本来想的是两个log的二分
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){static char buf[100000],*p1=buf,*p2=buf;if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }return *p1++;}inline void read(int &x){char c=nc(),b=1;for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}void scan(int *a,int n){int add,first,mod,prod;read(add),read(first),read(mod),read(prod);a[1]=first%mod;for (int i=2;i<=n;i++) a[i]=((ll)a[i-1]*prod+add+i)%mod;}const int N=100005;const int MOD=19921228;int n; ll ans;int P[N],C[N],L[N],R[N];int sx[N],icnt;inline int Bin(int x){return lower_bound(sx+1,sx+icnt+1,x)-sx;}struct event{int t,c,f,k;event() {}event(int t,int c,int f,int k) : t(t),c(c),f(f),k(k){}bool operator < (const event &B) const {return t==B.t?f<B.f:t<B.t;}}eve[N*3];int tot;int ls[N*4],rs[N*4],sum[N*4];int ncnt,root;void Add(int &x,int l,int r,int t,int z){if (!x) x=++ncnt;sum[x]=sum[x]+z;if (l==r) return; int mid=(l+r)>>1;if (t<=mid) Add(ls[x],l,mid,t,z);else Add(rs[x],mid+1,r,t,z);}int Query(int x,int l,int r,int k){if (l==r) return l; int mid=(l+r)>>1;if (sum[rs[x]]>=k) return Query(rs[x],mid+1,r,k);elsereturn Query(ls[x],l,mid,k-sum[rs[x]]);}int main(){freopen("t.in","r",stdin);freopen("t.out","w",stdout);read(n);scan(P,n),scan(C,n),scan(L,n),scan(R,n);for (int i=1;i<=n;i++) sx[++icnt]=C[i];sort(sx+1,sx+icnt+1); icnt=unique(sx+1,sx+icnt+1)-sx-1;for (int i=1;i<=n;i++) C[i]=Bin(C[i]);for (int i=1;i<=n;i++){if (L[i]>R[i]) swap(L[i],R[i]);eve[++tot]=event(L[i],C[i],0,0);eve[++tot]=event(P[i],0,2,i);eve[++tot]=event(R[i]+1,C[i],1,0);}sort(eve+1,eve+tot+1);for (int i=1;i<=tot;i++){if (eve[i].f==0) Add(root,1,icnt,eve[i].c,1);else if (eve[i].f==1) Add(root,1,icnt,eve[i].c,-1);else if (sum[root]>=eve[i].k) (ans+=sx[Query(root,1,icnt,eve[i].k)])%=MOD;}printf("%lld\n",ans);return 0;}
0 0
- [扫描线 线段树] BZOJ 2161 布娃娃
- bzoj 2161: 布娃娃 (扫描线+线段树)
- [BZOJ2161]布娃娃(扫描线+线段树)
- [BZOJ3161]布娃娃(扫描线+线段树)
- [BZOJ]2161: 布娃娃 权值线段树
- bzoj 2161: 布娃娃
- bzoj 2161: 布娃娃
- BZOJ 1818 线段树+扫描线
- BZOJ 4059 Cerc2012 Non-boring sequences 线段树+扫描线
- BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞
- Bzoj 4422: [Cerc2015]Cow Confinement(线段树+扫描线)
- [扫描线 线段树] BZOJ 4422 [Cerc2015]Cow Confinement
- bzoj 1218: [HNOI2003]激光炸弹 (扫描线+线段树)
- bzoj 1818: [Cqoi2010]内部白点 (扫描线+线段树)
- bzoj 3958: [WF2011]Mummy Madness (扫描线+线段树)
- bzoj 4059: [Cerc2012]Non-boring sequences 线段树+扫描线
- 线段树[扫描线]
- 线段树+扫描线
- Java基础与案例开发详解のJava与C、C++、C#对比分析
- 前端同学大福利,最全的面试题目整理
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- 第五章 处理器拦截器详解
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- [扫描线 线段树] BZOJ 2161 布娃娃
- FragmentTransaction addToBackStack 无效问题
- HDU2012 素数判定
- MySQL数据库优化概述
- Valid Parentheses
- CSDN-markdown编辑器语法——字体、字号与颜色
- Ng机器学习 Week11 Application Example: Photo OCR
- Struts2—非UI标签—控制标签
- 图论