当前位置: 首页 > news >正文

PHP动态网站开发实训总结谷歌play商店

PHP动态网站开发实训总结,谷歌play商店,学生党0元做微商代理,织梦网站seo题目链接 题意: 给定n个区间[ l, r ]和颜色c, 每次给[l, r]涂上c这个颜色. 后面的涂色会覆盖之前的涂色. 最后要求输出区间[0, 8000]中每种颜色及其出现的次数, 如果该颜色没有出现过则不输出. 思路:典型的线段树区间染色问题,一般这种题…

题目链接

题意:

给定n个区间[ l, r ]和颜色c, 每次给[l, r]涂上c这个颜色. 后面的涂色会覆盖之前的涂色.

最后要求输出区间[0, 8000]中每种颜色及其出现的次数, 如果该颜色没有出现过则不输出.

思路:典型的线段树区间染色问题,一般这种题在(l , r) 区间有问题,比如这题我们正常做法就是把区间变为点,但是我们注意到 我们染色[ 1 , 2 ] 和 [ 3 , 4 ] 后  [ 2, 3 ] 这一段我们并没有染色,而我们当点处理这一段会被染色,还有一个问题就是染色区间为[ 0,8000 ], 0在线段树里我们并不能维护,所以我们在处理[ l , r ] 时右移 l ,变为[ l +1 , r ],这样问题都解决了。,我们可以用一个 pre 记录 前面的颜色,

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define Yshanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 2e4 + 10, M = 1010, inf = 0x3f3f3f3f, mod = 1e9 + 7, P = 13331;
const double eps = 1e-8;
int n, pre;
int ans[N];
int color[N];
void pushdown(int u)
{color[u << 1] = color[u];color[u << 1 | 1] = color[u];color[u] = -1;
}
void modify(int u, int l, int r, int L, int R, int c)
{if (l >= L && r <= R){color[u] = c;return;}if (color[u] != -1)pushdown(u);int mid = l + r >> 1;if (L <= mid)modify(u << 1, l, mid, L, R, c);if (R > mid)modify(u << 1 | 1, mid + 1, r, L, R, c);
}
void query(int u, int l, int r)//这种查询方式一定会查到底才行
{if (l == r){if (color[u] != -1 && pre != color[u]){ans[color[u]]++;}pre = color[u];return;}if (color[u] != -1)pushdown(u);int mid = l + r >> 1;query(u << 1, l, mid); // 就和dfs一样,先跑左子树,这样就相当于从左向右跑的区间query(u << 1 | 1, mid + 1, r);
}void query(int u, int l, int r)//而这一种相当于利用了懒标记的性质,
{if (color[u] != pre&&color[u]!=-1)//如果当前区间颜色和前面不同,只有这一段都是一个颜色color[u]才不是-1,这里比明白,可以在想想懒标记在modify和query的关系ans[color[u]]++;if (color[u] != -1 || l == r)//递归到了树底或者这一段区间有懒标记,就是这一段区间颜色形同,就不用pushdonw 懒标记了,毕竟这一段同色;{pre = color[u];return;}int mid = l + r >> 1;query(u << 1, l, mid), query(u << 1 | 1, mid + 1, r);
}
void solve()
{while (cin >> n){memset(ans, 0, sizeof ans);memset(color, -1, sizeof color);for (int i = 1; i <= n; i++){int l, r, c;cin >> l >> r >> c;modify(1, 1, 8010, l + 1, r, c);// 区间修改,需要注意两个点,}pre = -1;query(1, 1, 8010);for (int i = 0; i <= 8010; i++)if (ans[i])cout << i << " " << ans[i] << endl;cout << endl;}
}
signed main()
{Yshanqian;int T;T = 1;// cin >> T;for (int cases = 1; cases <= T; ++cases){// cout<<"Case #"<<cases<<": ";solve();}return 0;
}

 

http://www.tj-hxxt.cn/news/78150.html

相关文章:

  • 什么网站可以免费做视频的软件有哪些宁波网站推广方案
  • 海宁市住房与城乡规划建设局网站免费网站推广工具
  • 企业宣传册文案范文宁波seo的公司联系方式
  • 蓝色phpcms律师网站模板phpcms律师seo案例分析
  • 怎么做网站接口百度推广客户端怎么登陆
  • 同一个地方做几个网站推广信息哪个平台好
  • 中国镇江网seo诊断服务
  • 网站备案要关闭吗百度首页排名优化哪家专业
  • 商务卫士包括网站建设长沙网站制作策划
  • 用模板建商场购物网站最新足球消息
  • 国家外管局网站怎么做收汇百度竞价推广
  • 上海市浦东新区建设工程安全质量监督站网站seo排名快速上升
  • 怎么做资源网站新乡网络推广外包
  • 网站备案 需要上传网站么营销策略有哪些方面
  • 平台搭建与拆除流程黄冈网站seo
  • 如何搭建网站服务器天天自学网网址
  • 建立一个网站怎么做怎样申请网站注册
  • 北京手机网站设计电话关键词首页排名代发
  • 58网站怎么做优化免费seo关键词优化排名
  • 揭阳网站制作托管河南做网站的公司
  • 做网站的公司需要什么资质专门做排行榜的软件
  • 站酷网logo素材图库企业网站的优化建议
  • 网站建设电子书资料江西优化中心
  • 联系昆明网站建设免费seo营销软件
  • 如何做好网站关键词优化sem招聘
  • 深圳前十设计公司黑河seo
  • 前端容易被裁还是后端seo专业论坛
  • 太原做网站公司app推广一手单
  • 门户网站开发设计方案公关公司经营范围
  • 网站做互动百度pc版网页