hdu 1698 Just a Hook 基本线段树
2024-09-07 06:07:57
使用线段树更新每段区间的奖(1,2,3),最后在统计整段区间的数和,基本线段树,果断1A啊
#include<iostream>
#include<stdio.h>
using namespace std;
#define N 100000
struct node{
int l,r,p;
}a[N*4];
int n;
void build(int left,int right,int i){
a[i].l=left;
a[i].r=right;
a[i].p=1;
if(a[i].l==a[i].r){
return ;
}
int mid=(a[i].l+a[i].r)>>1;
build(left,mid,i*2);
build(mid+1,right,i*2+1);
// a[i].p=a[i*2].p+a[i*2+1].p;
}
void updata(int left,int right,int i,int p){
if(left==a[i].l&&a[i].r==right){
a[i].p=p;
return ;
}
if(a[i].p>=1){
a[i*2].p=a[i].p;
a[i*2+1].p=a[i].p;
a[i].p=-1;
}
int mid=(a[i].l+a[i].r)>>1;
if(mid>=right)
updata(left,right,i*2,p);
else if(mid<left)
updata(left,right,i*2+1,p);
else{
updata(left,mid,i*2,p);
updata(mid+1,right,i*2+1,p);
}
// a[i].p=a[i*2].p+a[i*2+1].p;
}
int ans=0;
void sum(int i){
// cout<<a[i].l<<" "<<a[i].r<<" "<<a[i].p<<endl;
if(a[i].p!=-1){
ans+=a[i].p*(a[i].r-a[i].l+1);
return ;
}
sum(i*2);
sum(i*2+1); }
int main(){
int t,s,x,y,z;
scanf("%d",&t);
int cou=1;
while(t--){
scanf("%d %d",&n,&s);
build(1,n,1);
while(s--){
scanf("%d%d%d",&x,&y,&z);
updata(x,y,1,z);
}
ans=0;
sum(1);
printf("Case %d: The total value of the hook is %d.\n",cou++,ans);
}
}
最新文章
- 做一个java项目要经过那些正规的步骤
- RFID-RC522、FM1702SL、M1卡初探
- 隐式调用 Intent 大全, 很全
- NBIbatis 微信框架
- UWP开发入门(十六)——常见的内存泄漏的原因
- C#的运算符重载
- centos 安装git server
- Ribbon 窗体的 MDI 子窗体使用 TabbedMDIManager 切换时工具条闪屏问题的解决办法
- 解决DropDownList 有一个无效 SelectedValue,因为它不在项目列表中。这是怎么回事?
- spring07 JDBC
- jquery判断表单提交是否为空
- PHPCMSV9上线方法及文件权限设置
- [0] 关于IComparable和IComparer接口和Comparer类
- C#工具:ASP.NET MVC生成图片验证码
- SQL Server GUID 数据迁移至MongoDB后怎样查看?
- Spring MVC请求流程
- 《高性能JavaScript》--读书笔记
- [PA2012] Tax
- D - GCD HDU - 1695 -模板-莫比乌斯容斥
- 不看好运维竖井产品模式,优云打造融合化运维PaaS平台
热门文章
- Java NIO Buffer说明
- 一个对象toString()方法如果没有被重写,那么默认调用它的父类Object的toString()方法,而Object的toString()方法是打印该对象的hashCode,一般hashCode就是此对象的内存地址
- B - Alyona and mex(构造)
- 多文件上传ajax jquery
- 5.26 idea生成javadoc
- vim的快捷键大全
- vue2.0模拟锚点实现定位平滑滚动
- Apex语言(七)集合
- java源码
- Scrapy处理200-300范围之外的响应代码