Color the ball 線段樹 區間更新但點查詢
阿新 • • 發佈:2017-05-18
查詢 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; }
|
||||||||||
Color the ballTime 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 線段樹 區間更新但點查詢