原题:原题链接

题意:(机器翻译的...)

让我们将钩子的连续金属棒从1到N编号。对于每次操作,Pudge可以将连续的金属棒(从X到Y编号)改为铜棒,银棒或金棒。

钩的总值计算为N个金属棒的值的总和。更确切地说,每种棒的值计算如下:

对于每个铜棒,值为1.

对于每个银棒,值为2.

对于每个金棒,值为3.

Pudge想知道执行操作后钩子的总值。

你可能会认为原来的钩子是由铜棒组成的。

【思路】

线段树-区间更新lazy_tag

PS:原来都是1,不是0,因为这个卡了好久

#include<iostream>
#include<cstdio>
#include<cctype>
#include<algorithm>
#define MAXN 100005
using namespace std; inline int read()
{
char chr=getchar();
int f=1,ans=0;
while(!isdigit(chr)) {if(chr=='-') f=-1;chr=getchar();}
while(isdigit(chr)) {ans=ans*10;ans+=chr-'0';chr=getchar();}
return ans*f; } struct node{
int l,r;
int val,lazy;
int mid(){
return l+r>>1;
}
}t[MAXN<<2];
int a[MAXN];
int n,m;
void push_up(int x){//上传
t[x].val=t[x<<1].val+t[x<<1|1].val;
}
void push_down(int x){//下传
if(t[x].lazy){
t[x<<1].lazy=t[x].lazy;
t[x<<1|1].lazy=t[x].lazy;//如果是加上一个数的话,要写+=,改成一个数的话直接等于
t[x<<1].val=(t[x<<1].r-t[x<<1].l+1)*t[x<<1].lazy;
t[x<<1|1].val=(t[x<<1|1].r-t[x<<1|1].l+1)*t[x<<1|1].lazy;
t[x].lazy=0;
}
}
void build(int i,int l,int r){//建树
t[i].l=l;
t[i].r=r;
t[i].lazy=0;
if(l==r){
t[i].val=1;//初始铜棒——》 1
return;
}
build(i<<1,t[i].l,t[i].mid());
build(i<<1|1,t[i].mid()+1,t[i].r);
push_up(i);
} void updata(int i,int l,int r,int v){//更新
if(l<=t[i].l && t[i].r<=r){
t[i].val=(t[i].r-t[i].l+1)*v;//这里要注意(r-l+1)*v,不是v
t[i].lazy=v;
return;
}
push_down(i);//记得下传
int m=t[i].mid();
if(l<=m) updata(i<<1,l,r,v);
if(r>m) updata(i<<1|1,l,r,v);
push_up(i);//...
} int query(int i,int l,int r){
if(l<=t[i].l && t[i].r<=r) return t[i].val;
push_down(i);//敲黑板:这里不要忘了
int m=t[i].mid();
int sum=0;
if(l<=m) sum+=query(i<<1,l,r);
if(m<r) sum+=query(i<<1|1,l,r);
push_up(i);
return sum;
}
int T;
int main()
{
T=read(); int tot=0;
while(T--){
n=read();
build(1,1,n);
m=read();
while(m--){
int x=read(),y=read(),v=read();
updata(1,x,y,v);//更新
}
printf("Case %d: The total value of the hook is %d.\n",++tot,query(1,1,n));//格式很强
}
return 0;
}

最新文章

  1. PAT 1044. 火星数字(20)
  2. swift3.0变化总结
  3. JQuery 动画及一些小知识点
  4. 学习Erlang--1、入门
  5. java读取配置文件的几种方法
  6. 删除句子UITableView额外的底线和切割线
  7. CSS3特效----制作3D旋转照片展示区
  8. 1st_homework_SE--四则运算题目生成器
  9. (转)微信开发连接SAE数据库
  10. intelli idea中配置Tomcat找不到的解决办法
  11. 转JS--通过按钮直接把input或者textarea里的值复制到粘贴板里
  12. WPF&amp;Winform版本地图引擎
  13. nginx+tomcat负载均衡和session复制
  14. 2018-2019-2 20175306实验一《Java开发环境的熟悉》实验报告
  15. sqlserver 迁移
  16. android获取Context
  17. adb server version (31) doesn&#39;t match this client (40); killing...
  18. BZOJ.2111.[ZJOI2010]排列计数(DP Lucas)
  19. linux 101 hacks 3null 改文件大小写 xargs
  20. js 变速动画函数

热门文章

  1. Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法与解析
  2. Hibernate连接池断开自动重连
  3. Python - 面对对象(基础)
  4. 多层gmetad配置
  5. Git学习总结(13)——使用git.oschina作为自己的源代码在线管理库
  6. poj3233 题解 矩阵乘法 矩阵快速幂
  7. Grails,应该不错
  8. 【ACM】NYOJ_288_Time_20130725
  9. 关于Spring的xml文档的简单实用配置
  10. PHP array_intersect()