这个区间离散化把我调死了。。

总之用vector来离散化,然后叶子节点维护的是一段区间,记录下每个叶子结点的起点+长度

千万要注意下标不能弄错!

#include<bits/stdc++.h>
#define MAXN 400005
#define INF 1000000000
#define MOD 1000000007
#define F first
#define S second
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
int N;
int X[MAXN],Y[MAXN],L[MAXN],R[MAXN];
vector<int> v;
int X1,X2,Y1,Y2,A1,A2,B1,B2,C1,C2,M1,M2;
struct segtree
{
ll sum[*MAXN];
int lazy[*MAXN],len[*MAXN];
void pushup(int k)
{
sum[k]=sum[k*]+sum[k*+];
}
void pushdown(int k)
{
if(!lazy[k]) return;
for(int i=k*;i<=k*+;i++)
{
lazy[i]+=lazy[k];
sum[i]+=lazy[k]*len[i];
}
lazy[k]=;
return;
}
void build(int k,int l,int r)
{
if(l==r)
{
len[k]=v[l]-v[l-];
return;
}
int mid=(l+r)/;
build(k*,l,mid); build(k*+,mid+,r);
pushup(k);
len[k]=len[k*]+len[k*+];
}
void update(int k,int l,int r,int x,int y)
{
if(x>r||l>y) return;
if(l>=x&&r<=y)
{
lazy[k]++;
sum[k]+=len[k];
return;
}
pushdown(k);
int mid=(l+r)/;
update(k*,l,mid,x,y); update(k*+,mid+,r,x,y);
pushup(k);
}
int query(int k,int l,int r,ll x)
{
if(l==r)
{
int cnt=sum[k]/len[k];
int id=(x-)/cnt;
return v[l-]+id;
}
pushdown(k);
int mid=(l+r)/;
if(sum[k*]>=x) return query(k*,l,mid,x); else return query(k*+,mid+,r,x-sum[k*]);
}
}seg;
int main()
{
scanf("%d",&N);
scanf("%d%d%d%d%d%d",&X1,&X2,&A1,&B1,&C1,&M1);
scanf("%d%d%d%d%d%d",&Y1,&Y2,&A2,&B2,&C2,&M2);
X[]=X1; X[]=X2; Y[]=Y1; Y[]=Y2;
for(int i=;i<=N;i++)
{
X[i]=(1LL*A1*X[i-]+1LL*B1*X[i-]+C1)%M1;
Y[i]=(1LL*A2*Y[i-]+1LL*B2*Y[i-]+C2)%M2;
}
for(int i=;i<=N;i++)
{
L[i]=min(X[i],Y[i])+;
R[i]=max(X[i],Y[i])+; R[i]++;
v.push_back(L[i]); v.push_back(R[i]);
} sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end()); int sz=(int)v.size()-;
seg.build(,,sz);
ll sum=;
for(int i=;i<=N;i++)
{
int posl=lower_bound(v.begin(),v.end(),L[i])-v.begin();
int posr=lower_bound(v.begin(),v.end(),R[i])-v.begin();
posl++;
seg.update(,,sz,posl,posr);
sum+=R[i]-L[i];
printf("%d\n",seg.query(,,sz,(sum+)/));
}
return ;
}

update:其实用数组离散化也可以,,只是我的数组开小了一直不知道错在哪里。。

#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define maxn 800005
#define MAXN 800005
#define ll long long
ll x[maxn],y[maxn],l[maxn],r[maxn];
ll n,a1,a2,b1,b2,c1,c2,m1,m2,m;
vector<ll>v;
ll h[maxn]; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
//叶子结点l代表第l个区间,即起点为v[l-1],长度为v[l]-v[l-1]
ll sum[maxn<<],lazy[maxn<<],len[maxn<<];
void pushup(int rt){
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void pushdown(int rt){
if(lazy[rt]){
for(int i=(rt<<);i<=(rt<<|);i++){
lazy[i]+=lazy[rt];
sum[i]+=lazy[rt]*len[i];
}
lazy[rt]=;
}
}
void build(int l,int r,int rt){
if(l==r){
len[rt]=h[l+]-h[l];
return;
}
int m=l+r>>;
build(lson);build(rson);
len[rt]=len[rt<<]+len[rt<<|];
}
void update(int L,int R,int l,int r,int rt){
if(L>R)return;
if(L<=l && R>=r){
lazy[rt]++;
sum[rt]+=len[rt];
return;
}
pushdown(rt);
int m=l+r>>;
if(L<=m)update(L,R,lson);
if(R>m)update(L,R,rson);
pushup(rt);
}
ll query(ll k,int l,int r,int rt){
if(l==r){
int tmp=sum[rt]/len[rt];
int tmp2=(k-)/tmp;
return h[l]+tmp2;
}
pushdown(rt);
int m=l+r>>;
if(k<=sum[rt<<])return query(k,lson);
else return query(k-sum[rt<<],rson);
}
int main(){
cin>>n;
cin>>x[]>>x[]>>a1>>b1>>c1>>m1;
cin>>y[]>>y[]>>a2>>b2>>c2>>m2;
for(int i=;i<=n;i++){
x[i]=(a1*x[i-]+b1*x[i-]+c1)%m1;
y[i]=(a2*y[i-]+b2*y[i-]+c2)%m2;
}
for(int i=;i<=n;i++){
l[i]=min(x[i],y[i])+;
r[i]=max(x[i],y[i])+;
r[i]++;
h[++m]=l[i];h[++m]=r[i];
}
sort(h+,h++m);
m=unique(h+,h++m)-h-;
build(,m-,); ll sum=;
for(int i=;i<=n;i++){
int posl=lower_bound(h+,h+m+,l[i])-h;
int posr=lower_bound(h+,h+m+,r[i])-h;
posr--;
sum+=r[i]-l[i];
update(posl,posr,,m-,);
cout<<query((sum+)/,,m-,)<<'\n';
}
}

线段树区间离散化——牛客多校E的更多相关文章

  1. 线段树优化dp——牛客多校第一场I(好题)

    和两天做了两道数据结构优化dp的题,套路还是差不多的 题解链接! https://www.cnblogs.com/kls123/p/11221471.html 一些补充 其实这道题的dp[i]维护的不 ...

  2. ACM/ICPC 之 数据结构-线段树+区间离散化(POJ2528)

    这道题用线段树做更方便更新和查询,但是其数据范围很大,因此要将离散化和线段树结合起来,算是一道比较经典的线段树+离散化的例题. 线段树的离散化有很多方法,在这里,我先用一次结点离散化,间接将源左右端点 ...

  3. 线段树区间离散化维护按秩合并并查集(可撤销)——牛客多校第八场E

    模板题..去网上学了可撤销的并查集.. /* 给定一个无向图,边的属性为(u,v,l,r),表示<u,v>可以通过的size为[l,r] 求出有多少不同的size可以从1->n 把每 ...

  4. 线段树 B数据结构 牛客练习赛28

    链接:https://ac.nowcoder.com/acm/contest/200/B来源:牛客网 题目描述 qn姐姐最好了~     qn姐姐给你了一个长度为n的序列还有m次操作让你玩,     ...

  5. 【魔改】树状数组 牛客多校第五场I vcd 几何+阅读理解

    https://www.nowcoder.com/acm/contest/143/I vc-dimension 题解:分三种情况,组合数学算一下,其中一种要用树状数组维护 技巧(来自UESTC):1. ...

  6. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

  7. 牛客多校第三场 G Removing Stones(分治+线段树)

    牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...

  8. 牛客多校第四场sequence C (线段树+单调栈)

    牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...

  9. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

随机推荐

  1. mac上安装mamp集成环境

    深知mac配置环境是个坑,本人之前用的是xampp因为近期需要mongodb扩展,死活装不明白,索性就换了一个集成环境,在网上找了好多,最后选择了mamp 因为正版的要收费,所以在下载了N个以后终于找 ...

  2. delphi 文件夹操作

    文件的拖放和打开拖拽 user shellapi type TForm1 = class(TForm) ListView1: TListView; procedure FormCreate(Sende ...

  3. 2018.12.26 考试(哈希,二分,状压dp)

    T1 传送门 解题思路 发现有一个限制是每个字母都必须相等,那么就可以转化成首尾的差值相等,然后就可以求出\(k-1\)位的差值\(hash\)一下.\(k\)为字符集大小,时间复杂度为\(O(nk) ...

  4. js面向对象编程(第2版)——js继承多种方式

    附带书籍地址: js面向对象编程(第2版)

  5. (转)ubuntu下如何安装使用SSH?

    转:http://os.51cto.com/art/201109/291634.htm ubuntu默认并没有安装ssh服务,如果通过ssh链接ubuntu(比如使用securecrt客户端来访问ub ...

  6. Core Dump总结

    Core Dump总结 查看现在系统dump core的情况 ulimit -c 结果表示core文件的大小.如果显示0,则不会dump core,显示unlimited不限制core文件大小 打开d ...

  7. 洛谷 P2756 飞行员配对方案问题 (二分图匹配)

    题目链接:P2756 飞行员配对方案问题 题意 给定 \(m\) 个外籍飞行员和 \(n - m\) 个英国飞行员,每一架飞机需要一名英国飞行员和一名外籍飞行员,求最多能派出几架飞机. 思路 最大流 ...

  8. 『Golang』—— 标准库之 time

    ... package main import ( "fmt" "time" ) func main() { time.AfterFunc(time.Milli ...

  9. jenkins集成sonar代码审核工具

    在项目测试管理过程中,项目上线很多时候时间仓促,导致代码质量不高,测试时间不充分会导致线上出现各种各样的问题,这个时候一方面是增加测试的质量把控,还要从根本上解决开发小哥的代码质量问题.而Sonar这 ...

  10. 通过字体代替图片优化,如何使用Font Awesome字体图标?

    博客搬迁,给你带来的不便敬请谅解! http://www.suanliutudousi.com/2017/10/17/%E9%80%9A%E8%BF%87%E5%AD%97%E4%BD%93%E4%B ...