题目链接

分析:1-N区间内初始都是1,然后q个询问,每个询问修改区间【a,b】的值为2或3或者1,统计最后整个区间的和

本来想刷刷手速,结果还是写了一个小时,第一个超时,因为输出的时候去每个区间查找了,直接输出tree[1].value就可以了 =_=

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdio>
using namespace std;
const int Max = ;
int hook[Max + ];
struct node
{
int l,r;
int value;
int tag;
};
node tree[ * Max];
void buildTree(int left, int right, int k)
{
tree[k].l = left;
tree[k].r = right;
tree[k].tag = -;
if(left == right)
{
tree[k].value = ;
return;
}
int mid = (left + right ) / ;
buildTree(left, mid, k * );
buildTree(mid + , right, k * + );
tree[k].value = tree[k * ].value + tree[k * + ].value;
}
void upDate(int left, int right, int k, int newp)
{
if(tree[k].l ==left && tree[k].r == right)
{
tree[k].value = (right - left + ) * newp;
tree[k].tag = newp;
return;
}
if(tree[k].tag != -)
{
tree[k * ].tag = tree[k * + ].tag = tree[k].tag;
tree[k * ].value = (tree[k * ].r - tree[k * ].l + ) * tree[k].tag;
tree[k * + ].value = (tree[k * + ].r - tree[k * + ].l + ) * tree[k].tag;
tree[k].tag = -;
}
int mid = (tree[k].l + tree[k].r) / ;
if(right <= mid)
{
upDate(left, right, k * , newp);
}
else if(mid < left)
{
upDate(left, right, k * + , newp);
}
else
{
upDate(left, mid, k * , newp);
upDate(mid + , right, k * + , newp);
}
tree[k].value = tree[k * ].value + tree[k * + ].value;
}
int Search(int k)
{
if(tree[k].tag != -)
{
tree[k * ].tag = tree[k * + ].tag = tree[k].tag;
tree[k * ].value = (tree[k * ].r - tree[k * ].l + ) * tree[k].tag;
tree[k * + ].value = (tree[k * + ].r - tree[k * + ].l + ) * tree[k].tag;
tree[k].tag = -;
}
if(tree[k].l == tree[k].r)
return tree[k].value;
return Search(k * ) + Search(k * + );
}
int main()
{
int test,n;
scanf("%d", &test);
for(int t = ; t <= test; t++)
{
int q,a,b,newp;
scanf("%d", &n);
buildTree(, n, );
scanf("%d", &q);
for(int i = ; i <= q; i++)
{
scanf("%d%d%d", &a, &b, &newp);
upDate(a, b, , newp);
}
printf("Case %d: The total value of the hook is %d.\n", t, tree[].value);
}
return ;
}

最新文章

  1. 如何在centos下部署Node环境
  2. android删除无用资源文件的python脚本
  3. DockerProblem
  4. windows核心编程---第二章 字符和字符串处理
  5. AFX_MANAGE_STATE(AfxGetStaticModuleState())DLL导出函数包含MFC资源
  6. CoreLoation
  7. PHP获取手机相关信息
  8. MySql服务器的启动和关闭
  9. STL 源代码剖析 算法 stl_algo.h -- lower_bound
  10. easyui 初体验
  11. ActionBar官方教程(4)给ActionBar添加操作项及它们的事件处理
  12. Linux自动登陆的设置方法
  13. 移动端H5页面惯性滑动监听
  14. Android类似Periscope点赞效果
  15. PAT1043:Is It a Binary Search Tree
  16. Win7系统下,docker构建nginx+php7环境实践
  17. xmind使用
  18. PDOMySQL实现类, 自动重置无效连接
  19. sql转百分比并保留两位小数
  20. Spring Cloud下基于OAUTH2认证授权的实现

热门文章

  1. 系统升级日记(2)- 升级到SharePoint Server 2013
  2. android之拍照与摄像
  3. [AJAX系列]$.get(url,[data],[fn],[type])
  4. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:create (default-cli) on project standalone-pom: Unable to parse configuration of 3: mojo org.apache.maven.plugins:
  5. Hibernated的sql查询
  6. 了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult &amp; JsonResult
  7. 关于mysql数据库行级锁的使用(一)
  8. Linux_日志管理介绍(一)
  9. Javascript写俄罗斯方块游戏
  10. awk打开多个文件的方法