园艺问题
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述

本巨养了一盆双色茉莉。这种花有一种特点:第i朵花在第Di天盛开,刚开时是紫色的,Ai天之后会变成白色,再过Bi天就会凋谢。如Di = 3,Ai = 4,Bi = 5,那么在第3至6天为紫色,第7至11天为白色,第11天之后就凋谢了。

现在给出一些事件,你需要按要求给出答案。

事件1:在第Di天开了一朵花,这朵花Ai天后变成白色,再过Bi天就会凋谢。

事件2:询问在第X天时,紫色花朵和白色花朵各有多少。
输入

输入包含多组。对于每组数据:

第一行包含一个整数n (1 <= n <= 300,000)。

接下来的n行,为下述两种格式的一种,分别代表事件1和事件2。

1 Di Ai Bi

2 X

对于所有数据有:1 <= Di,Ai,Bi <= 1,000,000,000 ,1 <= Ai <= 3,000,000,000;
输出

对于每个事件2输出一行,包含两个整数代表答案。
示例输入

4
1 3 2 3
2 4
1 2 1 1
2 10

示例输出

1 0
0 0
周赛的时候没有想到可以先全部输入进行离散化,再进行建树,我啸的一句话惊醒了我

#include <bits/stdc++.h>
#define LL long long
#define esp 1e-8
#define INF 0x3f3f3f3f
#define Fread() freopen("../in.in","r",stdin)
#define Fwrite() freopen("../out.out","w",stdout)using namespace std;const int Max = 301000;typedef struct Flow
{LL l,r,L,R;
}Flow;union Flower
{Flow F;LL Q;
};
typedef struct Seg
{int sum1;int sum2;
} Tree;
int Sta[Max];
Flower FF[Max];
Tree T[Max*5];
LL Da[Max*2];
int top2,top3;
LL a,b,d;
int c;
int num1,num2;
void Update_down(int site,int L,int R)//向下更新
{if(L==R){return ;}T[site<<1].sum1+=T[site].sum1;T[site<<1].sum2+=T[site].sum2;T[site<<1|1].sum1+=T[site].sum1;T[site<<1|1].sum2+=T[site].sum2;T[site].sum1=T[site].sum2=0;
}
void Build(int L,int R,int site)//建树
{T[site].sum1=0;T[site].sum2=0;if(L==R){return ;}int mid=(L+R)>>1;Build(L,mid,site<<1);Build(mid+1,R,site<<1|1);
}
void Update(int L,int R,int l,int r,int site,int ans)//更新
{if(L==l&&R==r){if(ans==1){T[site].sum1++;}else{T[site].sum2++;}return ;}int mid=(L+R)>>1;if(r<=mid){Update(L,mid,l,r,site<<1,ans);}else if(l>mid){Update(mid+1,R,l,r,site<<1|1,ans);}else{Update(L,mid,l,mid,site<<1,ans);Update(mid+1,R,mid+1,r,site<<1|1,ans);}
}
void Query(int L,int R,int x,int site)//查询
{if(L==R){num1=T[site].sum1;num2=T[site].sum2;return ;}Update_down(site,L,R);int mid=(L+R)>>1;if(x<=mid){Query(L,mid,x,site<<1);}else{Query(mid+1,R,x,site<<1|1);}}
int main()
{int n;while(~scanf("%d",&n)){vector<LL>Arr;for(int i=1; i<=n; i++){scanf("%d",&Sta[i]);if(Sta[i]==1){scanf("%lld %lld %lld",&d,&a,&b);FF[i].F.l=d;FF[i].F.r=d+a-1;FF[i].F.L=d+a;FF[i].F.R=d+a+b-1;Arr.push_back(d);Arr.push_back(d+a-1);Arr.push_back(d+a);Arr.push_back(d+a+b-1);}else{scanf("%lld",&FF[i].Q);Arr.push_back(FF[i].Q);}}sort(Arr.begin(),Arr.end());Arr.erase(unique(Arr.begin(),Arr.end()),Arr.end());//去重int ans=0;map<LL,int>Ma;for(int i=0; i<Arr.size(); i++){Ma[Arr[i]]=++ans;//编号}Build(1,ans,1);for(int i=1;i<=n;i++){if(Sta[i]==1){Update(1,ans,Ma[FF[i].F.l],Ma[FF[i].F.r],1,1);Update(1,ans,Ma[FF[i].F.L],Ma[FF[i].F.R],1,2);}else{num1=num2=0;Query(1,ans,Ma[FF[i].Q],1);printf("%d %d\n",num1,num2);}}}return 0;
}

转载于:https://www.cnblogs.com/juechen/p/5255915.html

SUDTOJ 3323园艺问题 (线段树)相关推荐

  1. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

  2. 线段树——HDU - 1698

    题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...

  3. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  4. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  5. [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树

    Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...

  6. codefores 786B. Legacy(最短路,线段树优化拆点,好题)

    题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

  7. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

  8. 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)

    题目链接 题意: 给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作: 1 u v:u到v路径(最短)上的边都取成相反的颜色 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一 ...

  9. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

    这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...

最新文章

  1. FilteredTextBoxExtender
  2. java hibernate 多对多_java - hibernate多对多问题
  3. insert exec 语句不能嵌套_MySQL ------ 插入数据(INSERT和insert select)(二十)
  4. 2022年计算机专业程序员笔记本电脑推荐
  5. vue各种组件(不断增加中...)
  6. Ubuntu 安装DELL D630无线网卡驱动
  7. [TWAIN] 3句话总结TWAIN在Windows Server 2008 R2 SP1的使用
  8. ios 8 适配须知
  9. 流量治理神器-Sentinel限流熔断应用实战
  10. 更改MyEclipse匹配颜色
  11. 管理系统里用户角色与权限的设计
  12. 相册服务器位置,如何将相册存放在云服务器
  13. 【创新²】SERO超零协议项目进展双月报
  14. SQL对date类型的操作
  15. Android自定义键盘(KeyboardView)
  16. 【人工智能毕设之基于Python+flask+bilstm的评论情感分析系统-哔哩哔哩】 https://b23.tv/QU56eTl
  17. Ublox GPS模块型号入门介绍
  18. 软件设计原则 — 开放封闭原则
  19. Google 谷歌 AI博客:发布Objectron 3D对象检测模型数据集
  20. SQL截取字符串中的某个特定位置部分

热门文章

  1. 面向对象编程(OOP)和函数式编程(FP)的思考
  2. Problem E: 分数统计
  3. MATLAB中移动平均滤波器smooth函数的用法
  4. python打印输出12星座,怎么利用python输出星座
  5. IntelliJ IDEA中创建MyBatis.xml模板
  6. echart 高度 不用 不撑满_装修干货:橱柜高度到底要多高才合适?
  7. Jack Dorsey首条推文NFT的买家在伊朗被捕
  8. Ruffer Investment共持有略高于3%的比特币敞口
  9. SAP License:对一次性’客户‘的了解
  10. SAP License:你适合做SAP顾问吗?