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

济南智能网站建设咨询电话wordpress主页与文章页

济南智能网站建设咨询电话,wordpress主页与文章页,采购需求发布平台,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.yayakq.cn/news/473438/

相关文章:

  • 漫画驿站网页设计图纸尺寸图财政局网站建设自查报告
  • 网站跳转微信链接网站demo制作工具
  • 织梦的手机端网站怎样建设网站后台
  • 摄影网站制作流程正定网站制作
  • 中山网站建设方案外包做动漫姓氏头像的网站
  • 有口碑的顺德网站建设品牌网站建设小蝌蚪1
  • 事业单位建立网站番禺网站建设价格
  • 初中做历史的网站服务好的做培训网站
  • 在虚拟主机上建设多个网站公司域名注册步骤
  • 长沙网站建设流程建一个wordpress网站成本
  • 网盘搜索网站 怎么做seo诊断网站
  • 外贸soho怎么建网站网络推广软文
  • 东山县城乡规划建设局网站新建网站如何调试
  • wordpress 新文章网站sem优化怎么做
  • 科技网站欣赏佛山网页设计
  • 网站建设客户需求表 文库群团组织网站建设
  • 张家口网站网站建设网站后台无法编辑文字
  • 上海网站专业制作人力外包和项目外包哪个好
  • 网站需求分析报告范文网站界面设计的发展趋势
  • 网站 的建设意义网页设计培训好学吗
  • 杭州精品课程网站建设wordpress poststatus
  • 赣州网站优化公司怎么找到精准客户资源
  • 可以投稿的写作网站域名解析 别人网站
  • 点击运行显示网站正在建设网上如何推广平台
  • 重庆奉节网站建设公司哪家专业顺企网官网下载
  • 比较好的能组数学卷的网站做教案的去除wordpress评论电子邮件
  • 网站建设综合推荐网络推广中心
  • 佛山市三山新城建设局网站河北seo
  • 网站怎么做关键词排名wordpress 输出json
  • 网站建设的业务范围手机建设网站策划书