1. 程式人生 > >Color the ball 線段樹 區間更新但點查詢

Color the ball 線段樹 區間更新但點查詢

查詢 main rst cst con time ear rtu ani

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<queue>
#include<deque>
#include<iomanip>
#include<vector>
#include<cmath>
#include<map>
#include<stack>
#include
<set> #include<fstream> #include<memory> #include<list> #include<string> using namespace std; typedef long long LL; typedef unsigned long long ULL; #define MAXN 100001 #define L 31 #define INF 1000000009 #define eps 0.00000001 struct node { LL l, r, data; }T[MAXN*4+10]; LL n,a[MAXN]; LL Query(LL p, LL k) {
if (T[p].l == T[p].r) return T[p].data; LL mid = (T[p].l + T[p].r) >> 1; LL sum = T[p].data; if (k <= mid) sum += Query(p << 1, k); else sum += Query(p << 1 | 1, k); return sum; } void Build(LL p, LL l, LL r) { T[p].l = l, T[p].r = r, T[p].data = 0
; if (l == r) { T[p].data = a[l]; return; } LL mid = (l + r) >> 1; Build(p << 1, l, mid); Build(p <<1 | 1, mid + 1, r); } void Insert(LL p, LL l, LL r, LL num) { //cout << p << ‘ ‘ << l << ‘ ‘ << r << ‘ ‘ << num << endl; if (l <= T[p].l&&r >= T[p].r) { T[p].data += num; return; } LL mid = (T[p].l + T[p].r) / 2; if (r <= mid) Insert(p << 1, l, r, num); else if (l > mid) Insert(p << 1 | 1, l, r, num); else { Insert(p << 1, l, mid, num); Insert(p << 1 | 1, mid + 1, r, num); } } int main() { while (scanf("%lld", &n), n) { LL t1, t2; memset(a, 0, sizeof(a)); Build(1, 1, n); for (LL i = 1; i <= n; i++) { scanf("%lld%lld", &t1, &t2); Insert(1, t1, t2, 1); } for (LL i = 1; i <= n; i++) { if (i>1) printf(" "); printf("%lld", Query(1, i)); } printf("\n"); } return 0; }

技術分享
F.A.Q
Hand In Hand
Online Acmers
Forum | Discuss
Statistical Charts
Problem Archive
Realtime Judge Status
Authors Ranklist
C/C++/Java Exams
ACM Steps
Go to Job
Contest LiveCast
[email protected]
Best Coder beta
VIP | STD Contests
Virtual Contests
DIY | Web-DIY beta
Recent Contests
技術分享 joey97
技術分享 Mail 0(0)
技術分享 Control Panel
技術分享 Sign Out

Color the ball

Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 19857 Accepted Submission(s): 9901


Problem Description N個氣球排成一排,從左到右依次編號為1,2,3....N.每次給定2個整數a b(a <= b),lele便為騎上他的“小飛鴿"牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是N次以後lele已經忘記了第I個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?
Input 每個測試實例第一行為一個整數N,(N <= 100000).接下來的N行,每行包括2個整數a b(1 <= a <= b <= N)。
當N = 0,輸入結束。
Output 每個測試實例輸出一行,包括N個整數,第I個數代表第I個氣球總共被塗色的次數。
Sample Input 3 1 1 2 2 3 3 3 1 1 1 2 1 3 0
Sample Output 1 1 1 3 2 1
Author 8600

Color the ball 線段樹 區間更新但點查詢