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

PHP动态网站开发实训总结新东方英语线下培训学校

PHP动态网站开发实训总结,新东方英语线下培训学校,丹东网站网站建设,wordpress 默认搜索引擎题目链接 题意: 给定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.khdw.cn/news/67684.html

相关文章:

  • 什么企业网站能自己做东莞seo推广公司
  • 各类郑州网站建设2345浏览器网页版
  • vip影视网站如何做app网络营销公司
  • 汽贸做网站有用处吗网站查询域名解析
  • 淘宝销售书网站建设方案免费刷粉网站推广免费
  • 松江营销型网站建设公司国外电商平台有哪些
  • 电子商务建设网站的测试和发布如何搭建自己的网站
  • 成都哪里有做网站建设的网站收录查询方法
  • 网站的配色方案百度秒收录技术最新
  • 海南自贸区百度seo外包
  • 怎么查看网站备案商开淘宝店铺怎么运营推广
  • 门户网站系统程序西安百度竞价托管代运营
  • 6东莞做网站网络营销与直播电商专业就业前景
  • 网站建设及代运营合同百度推广客户端电脑版
  • 海口网站如何制作网络推广运营优化
  • wordpress wportal页面优化的方法有哪些
  • 新安网站建设典型十大优秀网络营销案例
  • 动态网站的工作原理关键词抓取工具都有哪些
  • 支付网站建设会计分录网络营销logo
  • 日本做设计的网站百度手机app下载安装
  • 做视频网站要什么格式好代发百度关键词排名
  • 汕头制作企业网站代做seo排名
  • 网站建设方案书 内容管理制度交换友情链接的方法
  • 微信上的网站怎么做的吗seo站外推广
  • 专门做视频的网站吗西安seo哪家好
  • 昆明网站建设织梦网站代搭建维护
  • 网站首页的图标是怎么做的网站推广计划书范文
  • 一个网站要多大的空间云南百度公司
  • 长滚动页网站怎么做的如何网站关键词优化
  • 自己做婚恋网站广西seo快速排名