(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦

Catalog

Problem:Portal传送门

 原题目描述在最下面。

 每次把\(n\)变成\(⌊ \frac{n}{2}⌋,n\%2, ⌊ \frac{n}{2}⌋\),直至 \(n\) 为\(1\) 或\(0\),问区间\(1\)的数量。

Solution:

 类似线段树的结构,模拟线段树即可。可以枚举加单点更新也可以区间更新。

 \(R-L \leq 1e5, \; n \leq 2^{50}\)

 时间复杂度:\(log(n)\times1e5\)

AC_Code:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<vector>
#include<cmath>
#include<bitset>
#include<cassert>
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define mme(a,b) memset((a),(b),sizeof((a)))
#define fuck(x) cout<<"* "<<x<<"\n"
#define iis std::ios::sync_with_stdio(false)
using namespace std;
typedef pair<int,int> pii;
typedef long long LL;
const int MXN = 1e5 + 7;
const int MXE = 1e6 + 7;
const int mod = 998244353;
const int INF = 0x3f3f3f3f; LL n, l ,r;
/*****区间更新*****/
LL query(LL L,LL R,LL l,LL r,LL rt){
if(L>r||R<l)return 0;
if(rt<2||l==r)return rt%2;
LL mid = (l + r)/2, ans = 0;
if(L>mid){
ans = query(L,R,mid+1,r,rt/2);
}else if(R<mid){
ans = query(L,R,l,mid-1,rt/2);
}else{
ans = query(L,mid-1,l,mid-1,rt/2)+query(mid+1,R,mid+1,r,rt/2)+query(mid,mid,mid,mid,rt%2);
}
return ans;
}
int main(){
while(~scanf("%lld%lld%lld", &n, &l, &r)){
LL ans = 0, m = n, len = 1;
while(m > 1){
len = len<<1|1;
m >>= 1;
}
printf("%lld\n", query(l,r,1,len,n));
}
return 0;
}
/*****枚举+单点更新*****/
int query(LL p,LL l,LL r,LL rt){
if(rt<2||l==r){
return rt;
}
LL mid = (l + r)/2;
if(p==mid)return query(p,mid,mid,rt%2);
else if(p<mid)return query(p,l,mid-1,rt/2);
return query(p,mid+1,r,rt/2);
}
int main(){
while(~scanf("%lld%lld%lld", &n, &l, &r)){
LL ans = 0, m = n, len = 1;
while(m>1){
len = len<<1|1;
m >>= 1;
}
for(LL i = l; i <= r; ++i){
ans += query(i,1,len,n);
}
printf("%lld\n", ans);
}
return 0;
}

####Problem Description:
![这里写图片描述](https://img-blog.csdn.net/20180828122417863)

Codeforces768B-Code For 1-类似线段树-枚举+单点更新or区间更新的更多相关文章

  1. HDU 4348 To the moon 可持久化线段树,有时间戳的区间更新,区间求和

    To the moonTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.a ...

  2. HDU(1754),线段树,单点替换,区间最值

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...

  3. HDU - 1166 - 敌兵布阵 线段树的单点修改,区间求和

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  4. 【线段树(单点修改,区间求和)】HDU1166 - 敌军布阵

    hdu1166 敌兵布阵,单点修改,区间求和. [ATTENTION]MAXN要开成节点数的4倍,开得不够会提示TLE. #include<iostream> #include<cs ...

  5. 1754-I Hate It 线段树(单点替换,区间最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. 线段树(单点更新and成段更新)

    线段树需要的空间. 区间为1-->n 假设是一棵完全二叉树,且树高为i. 完全二叉树性质:第i层最多有2^(i-1)个结点. 那么 2^(i-1) = n;     i = log2(n)  + ...

  7. hdu1754线段树的单点更新区间查询

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. hdu 1754 线段树(Max+单点修改)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. hdu 1166 线段树(sum+单点修改)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

随机推荐

  1. flex: 1在ios10.2系统手机端的换行布局失败问题

    使用flex:1要追加flex-basis: auto;可以简写flex: 1 1 auto; 表格不可以用flex布局

  2. common配置文件

    <dependencies> <dependency> <groupId>com.github.pagehelper</groupId> <art ...

  3. java poi导出Excel合并单元格并设置边框

    import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; i ...

  4. CSS Id 和 Class

    id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器.直线电机哪家好 id 选择器 id ...

  5. BZOJ 3230: 相似子串(后缀数组)

    传送门 解题思路 其实题目挺好想的.首先子串排名可以由后缀数组求得,因为不算重复的,所以后缀数组的每个后缀排名的去掉\(lcp\)的前缀排名为当前后缀的子串排名.这样就可以预处理出每个后缀的\(l,r ...

  6. CF D. Walking Between Houses (贪心)

    题意: 现在有n个房子排成一列,编号为1~n,起初你在第1个房子里,现在你要进行k次移动,每次移动一都可以从一个房子i移动到另外一个其他的房子j里(i != j),移动的距离为|j - i|.问你进过 ...

  7. psql内部命令及对应sql语句

    \?: 查看所有帮助  \l: 查看所有数据库  SELECT d.datname as "Name",       pg_catalog.pg_get_userbyid(d.da ...

  8. Golang(Go语言)内置函数之copy用法

    该函数主要是切片(slice)的拷贝,不支持数组 将第二个slice里的元素拷贝到第一个slice里,拷贝的长度为两个slice中长度较小的长度值 示例: s := []int{1,2,3} fmt. ...

  9. Django框架(十一)—— 常用字段、参数、元信息、多对多关联关系

    目录 常用字段和参数 一.ORM字段 二.ORM参数 三.关系字段 1.ForeignKey 2.OneToOneFiled 3.ManyToManyField 四.元信息 五.多对多关联关系的三种方 ...

  10. 基于OpenResty与Consul实现服务网格ServiceMesh

    一.逻辑架构 1.基于OpenResty开发智能代理: 利用其动态可编程特性,动态化配置nginx服务路由: 2.需要向OpenResty添加weibo开源的upsync服务发现模块: 3.基于con ...