Color the ball HDU - 1556 (线段树)
思路:线段树,区间更新
1 #include<iostream> 2 #include<vector> 3 #include<string> 4 #include<cmath> 5 #include<set> 6 #include<algorithm> 7 #include<cstdio> 8 #include<map> 9 #include<cstring> 10 #include<list> 11 12 #define MAXSIZE 100010 13 14 using namespace std; 15 16 int tree[MAXSIZE*4]; 17 int lz[MAXSIZE*4]; 18 int N; 19 int cnt = 0; // 控制输出的打印格式 20 21 22 void init() 23 { 24 memset(tree, 0, sizeof(tree)); 25 memset(lz, 0, sizeof(lz)); 26 } 27 28 29 void build(int node, int l, int r) 30 { 31 if(l == r) 32 { 33 tree[node] = 0; 34 return; 35 } 36 int mid = (l+r)/2; 37 build(node*2, l, mid); 38 build(node*2+1, mid+1, r); 39 40 tree[node] = tree[node*2] + tree[node*2+1]; 41 } 42 43 44 void push_down(int node, int l, int r) 45 { 46 if(lz[node]) 47 { 48 int mid = (l+r)/2; 49 lz[node*2] += lz[node]; 50 lz[node*2+1] += lz[node]; 51 tree[node*2] += (mid-l+1)*lz[node]; 52 tree[node*2+1] += (r-mid)*lz[node]; 53 lz[node] = 0; 54 } 55 } 56 57 58 void update_range(int node, int l, int r, int L, int R, int add) 59 { 60 if(l <= L && r >= R) 61 { 62 lz[node] += add; 63 tree[node] += (R-L+1)*add; 64 return; 65 } 66 67 push_down(node, L, R); 68 int mid = (L+R)/2; 69 if(mid >= l) 70 update_range(node*2, l, r, L, mid, add); 71 if(mid < r) 72 update_range(node*2+1, l, r, mid+1, R, add); 73 74 tree[node] = tree[node*2] + tree[node*2+1]; 75 } 76 77 78 void print(int node, int l, int r) 79 { 80 if(l == r) 81 { 82 cnt++; 83 printf("%d", tree[node]); 84 if(cnt != N) 85 printf(" "); 86 else 87 printf("\n"); 88 return; 89 } 90 push_down(node, l, r); // 此处一定要记得push_down ! 91 int mid = (l+r)/2; 92 print(node*2, l, mid); 93 print(node*2+1, mid+1, r); 94 95 } 96 97 int main() 98 { 99 100 while(scanf("%d", &N) != EOF) 101 { 102 if(N == 0) 103 break; 104 init(); 105 build(1, 1, N); 106 for(int i = 0; i < N; ++i) 107 { 108 int a, b; 109 scanf("%d%d", &a, &b); 110 update_range(1, a, b, 1, N, 1); 111 } 112 cnt = 0; 113 print(1, 1, N); 114 } 115 116 return 0; 117 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-09-04 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )