当前位置:网站首页>2022 Hangzhou Electric Power Multi-School Session 6 1008.Shinobu Loves Segment Tree Regular Questions
2022 Hangzhou Electric Power Multi-School Session 6 1008.Shinobu Loves Segment Tree Regular Questions
2022-08-05 10:17:00 【HeartFireY】
题目分析
The time complexity of solving this problem O ( T log n ) O(T\log n) O(Tlogn),标程 O ( T log 2 n ) O(T \log^2 n) O(Tlog2n)
Find each node in order b u i l d build buildThe regularity of the resulting addition sequence:(若干个 1 1 1)+(same number 2 , 3 , 4... 2,3,4... 2,3,4...)+(several identical numbers),Then find the plus 2 , 3 , 4 , . . . 2,3,4,... 2,3,4,...The number of times is related to the number of layer nodes.即为加 2 ⌊ l o g 2 x ⌋ 2^{ {\lfloor log_2{x} \rfloor}} 2⌊log2x⌋次 2 , 3 , 4 , … 2,3,4,\dots 2,3,4,….
This rule can be passed 1. 1. 1.Analyze the segment tree b u i l d build build性质 2. 2. 2.暴力打表(牛逼) 发现
Then we can write the formula:Suppose the addition sequence length is s i z siz siz,加 1 1 1的个数为 c n t 1 cnt_1 cnt1,那么该节点 r t rt rtThe sum of can be expressed as :
c n t 1 + ( ( ( s i z − c n t 1 ) ( 2 ⌊ l o g 2 x ⌋ ) + 1 ) × ( ( s i z − c n t 1 ) ( 2 ⌊ l o g 2 x ⌋ ) + 2 ) 2 − 1 ) × 2 ⌊ l o g 2 x ⌋ + [ ( s i z − c n t 1 ) m o d ( 2 ⌊ l o g 2 x ⌋ ) ) ] × ( ( s i z − c n t 1 ) ( 2 ⌊ l o g 2 x ⌋ ) + 2 ) cnt_1 + (\frac{(\frac{(siz - cnt1)}{(2^{ {\lfloor log_2{x} \rfloor}})} + 1) \times (\frac{(siz - cnt1)}{(2^{ {\lfloor log_2{x} \rfloor}})} + 2)}{2} - 1) \times 2^{ {\lfloor log_2{x} \rfloor}} + [(siz - cnt_1) \mod (2^{ {\lfloor log_2{x} \rfloor}}))] \times (\frac{(siz - cnt1)}{(2^{ {\lfloor log_2{x} \rfloor}})} + 2) cnt1+(2((2⌊log2x⌋)(siz−cnt1)+1)×((2⌊log2x⌋)(siz−cnt1)+2)−1)×2⌊log2x⌋+[(siz−cnt1)mod(2⌊log2x⌋))]×((2⌊log2x⌋)(siz−cnt1)+2)The number of digits to add s i z siz siz的规律,对于当前节点 r t rt rt:
- ⌈ ( r t − 2 ⌊ l o g 2 r t ⌋ ) / 2 ⌉ m o d 2 = = 1 , s i z − = 2 ⌊ l o g 2 r t ⌋ − 2 \lceil(rt - 2^{\lfloor log_2{rt} \rfloor}) / 2 \rceil \mod2 == 1, siz -= 2^{\lfloor log_2{rt} \rfloor - 2} ⌈(rt−2⌊log2rt⌋)/2⌉mod2==1,siz−=2⌊log2rt⌋−2
- ⌈ ( r t − 2 ⌊ l o g 2 r t ⌋ ) / 2 ⌉ m o d 2 = = 0 , s i z − = 2 ⌊ l o g 2 r t ⌋ − 1 \lceil(rt - 2^{\lfloor log_2{rt} \rfloor}) / 2 \rceil \mod2 == 0, siz -= 2^{\lfloor log_2{rt} \rfloor - 1} ⌈(rt−2⌊log2rt⌋)/2⌉mod2==0,siz−=2⌊log2rt⌋−1
求 s i z siz siz时,可以令 s i z = n siz = n siz=n,Then follow the path up the tree(Actually corresponds to the binary digit of the number)向上走,Then subtract the value corresponding to the current node.
1 1 1的规律:可以 O ( 1 ) O(1) O(1)求:
c n t 1 = { 2 ( ⌊ l o g 2 x ⌋ − 1 ) , ( x − 2 ⌊ l o g 2 x ⌋ + 1 ) m o d 2 = 1 2 ⌊ l o g 2 x ⌋ , ( x − 2 ⌊ l o g 2 x ⌋ + 1 ) m o d 2 = 0 cnt_1 =\left\{\begin{matrix} 2^{({\lfloor log_2{x} \rfloor} - 1)},\ (x - 2^{ {\lfloor log_2{x} \rfloor}} + 1) \mod 2 =1 \\ 2^{ {\lfloor log_2{x} \rfloor}},\ (x - 2^{ {\lfloor log_2{x} \rfloor}} + 1) \mod 2 = 0 \end{matrix}\right. cnt1={ 2(⌊log2x⌋−1), (x−2⌊log2x⌋+1)mod2=12⌊log2x⌋, (x−2⌊log2x⌋+1)mod2=0注意,当 s i z < 0 siz < 0 siz<0时,特判输出 0 0 0,Ask for the first level s i z siz sizIt is also necessary to make special judgments to avoid overflow.同时对 n = 1 n = 1 n=1的 4 4 4A special case is also required,避免溢出.
Code
#include <bits/stdc++.h>
#pragma gcc optimize("O2")
#pragma g++ optimize("O2")
#define int long long
#define endl '\n'
using namespace std;
const int N = 2e5 + 10, MOD = 1e9 + 7;
inline void solve(){
int n = 0, x = 0; cin >> n >> x;
if(n == 1 && x == 1){
cout << 1 << endl; return; }
else if(n == 1 && x != 1){
cout << 0 << endl; return; }
if(x == 1){
cout << (n * (n + 1) / 2) << endl; return; }
//cout << "FUCK:" << get_range(x) << endl;
//if(x > get_range(x)){ cout << 0 << endl; return; }
int ceng = log2(x), ceng_fir = (1 << (ceng));
int cnt1 = ((x - ceng_fir + 1) % 2) ? (1 << (ceng - 1)) : ceng_fir;
if((x - ceng_fir + 1) == 0) cnt1 = ceng_fir;
// cnt_1 -> 1的个数
int siz = n;
int rt = x;
while(rt != 2 && rt != 3){
// cout << rt << " BEF | ";
int ceng_now = log2(rt) + 1, ser = rt - (1 << (ceng_now - 1)) + 1;
int md = ser % 4;
if(md == 1 || md == 2) siz -= (1 << (ceng_now - 3));
if(md == 3 || md == 0) siz -= (1 << (ceng_now - 2));
rt >>= 1;
// cout << rt << " AFT " << endl;
// cout << siz << endl;
}
if(rt != 1) siz -= 1;
if(siz <= 0){
cout << 0 << endl;
return;
}
if(siz <= cnt1){
cout << siz << endl;
return;
}
int yu = (siz - cnt1) % (ceng_fir), m = (siz - cnt1) / (ceng_fir);
int ans = yu * (m + 2) + cnt1 + ceng_fir * ((m + 1) * (m + 2) / 2 - 1);
cout << ans << endl;
}
signed main(){
ios_base::sync_with_stdio(false), cin.tie(0);
cout << fixed << setprecision(12);
int t = 1; cin >> t;
while(t--) solve();
return 0;
}
边栏推荐
- uniapp connect ibeacon
- Open Source Summer | How OpenHarmony Query Device Type (eTS)
- 你最隐秘的性格在哪?
- 高质量 DeFi 应用构建指南,助力开发者玩转 DeFi Summer
- Voice-based social software development - making the most of its value
- Technical dry goods | Hausdorff distance for image segmentation based on MindSpore
- LeetCode 216. Combined Sum III (2022.08.04)
- 百年北欧奢华家电品牌ASKO智能三温区酒柜臻献七夕,共品珍馐爱意
- How can project cost control help project success?
- 第五章:redis持久化,包括rdb和aof两种方式[通俗易懂]
猜你喜欢

高质量 DeFi 应用构建指南,助力开发者玩转 DeFi Summer

egg框架使用(一)

阿里顶级架构师多年总结的JVM宝典,哪里不会查哪里!

Advanced usage of C language

Qiu Jun, CEO of Eggplant Technology: Focus on users and make products that users really need

教你本地编译运行一个IDEA插件,在IDEA里聊天、下棋、斗地主!

leetcode: 529. 扫雷游戏

上位机开发C#语言:模拟STC串口助手接收单片机发送数据

STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)

Data Middle Office Construction (10): Data Security Management
随机推荐
The difference between find, matches, lookingAt matching strings in matcher
第三章 : redis数据结构种类
多线程(进阶) - 2.5w字总结
Introduction to SD NAND Flash!
three物体围绕一周呈球形排列
机器学习-基础知识 - Precision, Recall, Sensitivity, Specificity, Accuracy, FNR, FPR, TPR, TNR, F1 Score, Bal
七夕浪漫约会不加班,RPA机器人帮你搞定工作
Analysis and practice of antjian webshell dynamic encrypted connection
How can project cost control help project success?
阿里顶级架构师多年总结的JVM宝典,哪里不会查哪里!
阿里全新推出:微服务突击手册,把所有操作都写出来了PDF
第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用
Jenkins使用手册(2) —— 软件配置
Custom filters and interceptors implement ThreadLocal thread closure
three.js debugging tool dat.gui use
Wei Dongshan Digital Photo Frame Project Learning (6) Transplantation of tslib
韦东山 数码相框 项目学习(六)tslib的移植
【Office】Microsoft Office下载地址合集(微软官方原版离线安装下载)
【综合类型第 35 篇】程序员的七夕浪漫时刻
蚁剑webshell动态加密连接分析与实践