Codeforces768B-Code For 1-类似线段树-枚举+单点更新or区间更新
(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦
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:

Codeforces768B-Code For 1-类似线段树-枚举+单点更新or区间更新的更多相关文章
- HDU 4348 To the moon 可持久化线段树,有时间戳的区间更新,区间求和
		To the moonTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.a ... 
- HDU(1754),线段树,单点替换,区间最值
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ... 
- HDU - 1166 - 敌兵布阵 线段树的单点修改,区间求和
		#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ... 
- 【线段树(单点修改,区间求和)】HDU1166 - 敌军布阵
		hdu1166 敌兵布阵,单点修改,区间求和. [ATTENTION]MAXN要开成节点数的4倍,开得不够会提示TLE. #include<iostream> #include<cs ... 
- 1754-I Hate It 线段树(单点替换,区间最值)
		I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ... 
- 线段树(单点更新and成段更新)
		线段树需要的空间. 区间为1-->n 假设是一棵完全二叉树,且树高为i. 完全二叉树性质:第i层最多有2^(i-1)个结点. 那么 2^(i-1) = n; i = log2(n) + ... 
- hdu1754线段树的单点更新区间查询
		I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ... 
- hdu 1754 线段树(Max+单点修改)
		I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ... 
- hdu 1166 线段树(sum+单点修改)
		敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ... 
随机推荐
- Spring Boot 集成Mybatis实现多数据源
			静态的方式 我们以两套配置方式为例,在项目中有两套配置文件,两套mapper,两套SqlSessionFactory,各自处理各自的业务,这个两套mapper都可以进行增删改查的操作,在这两个主MYS ... 
- MySql5.7默认生成的密码无法正常登陆
			1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2.重启 mysqld 服务:sys ... 
- Read Committed
			在Read Committed隔离级别下,一个事务可能会遇到不可重复读(Non Repeatable Read)的问题. 不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一 ... 
- vbs 之 wscript
			https://www.jb51.net/article/20919.htm '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ... 
- 从pcap文件中分析出数据包
			import dpkt import struct import sys,os f=file(sys.argv[1],"rb") pcap=dpkt.pcap.Reader(f) ... 
- CodeForces-1249D2-Too Many Segments (hard version) -STL+贪心
			The only difference between easy and hard versions is constraints. You are given nn segments on the ... 
- sip会话流程以及sip介绍(3)
			1.mtk_ims_mo_sip报文交互流程 log: 步骤1:ATD触发MO呼叫尝试步骤2:VDM选择ADS到IMS.步骤3:触发VoLTE UA来设置MO调用.步骤4:SIP信息到P-CSCF进行 ... 
- nginx展示目录及美化
			1.下载nginx 2.下载fancyindex git clone https://github.com/aperezdc/ngx-fancyindex.git ngx-fancyindex 3.下 ... 
- Nginx学习——location和rewrite
			location语法: location [=|~|~*|^~] /uri/ { … } 记住以下即可: 完全匹配(=) 无正则普通匹配(^~)(^ 表示“非”,~ 表示“正则”,字符意思是:不要继续 ... 
- javascript 学习犯错记录
			看w3c学习js,有时按自己想法来,会出一些莫名奇妙的错误,而这些问题百度到了,但因为学习原因基础不捞,导致看到了答案,却认为这不是答案 1.一个很简单的 一个html,一个js文件 我想在js中的b ... 
