青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

oyjpArt ACM/ICPC算法程序設計空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

HOJ 11107

Posted on 2008-01-09 14:11 oyjpart 閱讀(7795) 評論(8)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽
Number of stones
Time Limit: 3000ms, Special Time Limit:7500ms, Memory Limit:32768KB
Total submit users: 13, Accepted users: 1
Problem 11107 : No special judgement
Problem description
There are N baskets rounded in a circle, and numbered as 1、2、3、…….、N-1、N, in clockwise. At the beginning, all of the baskets are empty. Some workers go to the moutain to collect stones. When they are back,they put their stones to some baskets. The workers have a habit, Once a worker come back, he choose a baskets, and choose a direction(clockwise or anticlockwise), he put one stone to this basket and move to the next basket according to the direction he has chosen, he continues doing this until all of the stones they have collected have been put down.
Sometimes the workers ask you how many stone it is in the basket, as there are too many baskets, You are to wirte a program to calculate this.


Input
The input test file will contain multiple cases. Each test case:
In the first line of the input contain two integers N,M(3 <= N <= 100000, 0 <= M <= 300000). Following M lines,each line represents an event. There are only three kinds of events: Q, C, U. And the format is:
“Q x”, query the number of stones in the basket x.
“C x num”, a worker comes back and the number of the stones he has picked up is num, he puts down stones from the basket x in clockwise.
“U x num”, a worker comes back and the number of the stone he has picked up is num, he puts down stones from the basket x in anticlockwise.
(x, num are both integers, 1 <= x <= N, 1 <= num <= 10000)


Output
For each query “Q x”, print the current number of stones in basket x.

Sample Input
5 8
            C 5 8
            Q 5
            Q 4
            U 5 3
            C 2 6
            Q 2
            Q 1
            U 2 8
            
Sample Output
2
            1
            4
            3
            
Problem Source
birdman


上次比賽沒有做..補做一個..挺好的題..重寫了點樹模板
 1/*
 2 * 主程序要作的事情
 3 * 1.確定N :必須是2^n,可以取實際n的上界
 4 * 2.build(left, right);
 5 *
 6 */

 7
 8#include <cstdio>
 9#include <cstring>
10
11const int N = 131072;                //必須是2^n,可以取實際n的上界
12
13int upperbound;
14
15struct Node {
16    int i, j, c, m;                    //left, right
17}
 T[N*2];
18
19void bd(int d, int left, int right) {
20    T[d].i = left, T[d].j = right, T[d].c = 0;
21    if(right > left) {
22        bd(d*2+1, left, T[d].m = (left+right)>>1);
23        bd(d*2+2, T[d].m+1, right);
24    }

25}

26
27void build(int left, int right) {
28    upperbound = 1;
29    while(upperbound < right-left+1) upperbound <<= 1;
30    bd(0, left, left + upperbound-1);
31}

32
33void add(int d, int left, int right, int c) {
34    if(left <= T[d].i && right >= T[d].j) {
35        T[d].c += c;
36    }

37    else {
38        if(left <= T[d].m) add(d*2+1, left, right, c);
39        if(right > T[d].m) add(d*2+2, left, right, c);
40    }

41}

42
43int get(int x) // 獲得點的覆蓋次數
44    int idx = upperbound+x-1, sum = 0;
45    do {
46        sum += T[idx].c;
47        idx = (idx-1)>>1;
48    }
 while(idx != 0);
49    return sum;
50}

51
52int n, m;
53
54void Add(int x, int num) {
55    int laps = (num-(n-x))/n;
56    if(laps > 0{
57        add(00, n-1, laps);
58    }

59    num -= laps*n;
60    if(n->= num) {
61        add(0, x, x+num-11);
62    }

63    else {
64        add(0, x, n-11);
65        add(00, (x+num-1)%n, 1);
66    }

67}

68
69int main() {
70    while(scanf("%d %d"&n, &m) != EOF) {
71        build(0, n-1);
72        while(m--{
73            char cmd;
74            int x, num;
75            scanf(" %c"&cmd);
76            if(cmd == 'Q'{
77                scanf("%d"&x); 
78                --x;
79                printf("%d\n", get(x));
80            }

81            else if(cmd == 'C'{
82                scanf("%d %d"&x, &num);
83                --x;
84                Add(x, num);
85            }

86            else if(cmd == 'U'{
87                scanf("%d %d"&x, &num);
88                --x;
89                int y = (x-num+1% n;
90                if(y < 0) y += n;
91                Add(y, num);
92            }

93        }

94    }

95
96    return 0;
97}

Feedback

# re: HOJ 11107   回復  更多評論   

2008-05-24 21:25 by terence_zhao
good pro
but cant follow you

# re: HOJ 11107   回復  更多評論   

2008-05-25 20:31 by sicheng[I am oyjpArt]
如果我們把這個環放成直線(準確的說是一個區間)來看的話,放入某一個籃子并且按照順時針旋轉一直放num,相當于在這個區間插入很多條線段。而進一步說,我們可以考慮只有3中線段,比如
區間是[0,4] 從3開始插入長度為11的線段 則可以分成
[3,4]
[0,4] * 2
[0,0]
而逆時針的情況很好處理,如果你現算出最后停在哪個點上,換一下起始點和終點就是順時針了.

最后是線段樹了,我們把所有的線段都分別插入.最后統計詢問中的點上有多少線段覆蓋就可以了.

要進行點的線段覆蓋查詢,有很多種做法,我覺得比較好的就是從葉節點向上到根節點,去疊加覆蓋數就可以了.

呵呵~~

# re: HOJ 11107   回復  更多評論   

2008-06-03 14:01 by w
建樹可以非遞歸話吧

# re: HOJ 11107   回復  更多評論   

2008-10-13 10:57 by re: HOJ 11107
謝謝大牛了,我搞了半天終于弄懂了什么原理哈

# re: HOJ 11107   回復  更多評論   

2008-10-13 14:14 by re: HOJ 11107
int get(int x) { // 獲得點的覆蓋次數
44 int idx = upperbound+x-1, sum = 0;
45 do {
46 sum += T[idx].c;
47 idx = (idx-1)>>1;
48 } while(idx != 0);
49 return sum;
50}

貌似這里有個錯誤,你的代碼對這組數據通不過:
5 3
C 1 5
Q 1
Q 5

應改為:

int get(int x) { // 獲得點的覆蓋次數
44 int idx = upperbound+x-1, sum = 0;
45 do {
46 sum += T[idx].c;
47 idx -= 1;
if(idx != -1) idx >>= 1;
48 } while(idx >= 0);
49 return sum;
50}

# re: HOJ 11107   回復  更多評論   

2008-10-16 02:30 by oyjpart
Thx!~

# re: HOJ 11107   回復  更多評論   

2009-03-23 20:41 by 成大才子
絕對大牛

# re: HOJ 11107   回復  更多評論   

2009-03-26 00:27 by alpc12
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人有码| 欧美一区二区视频免费观看| 欧美激情网友自拍| 亚洲精品一区二| 亚洲欧洲日本专区| 欧美日韩中文字幕| 午夜精品在线看| 欧美专区18| 91久久综合亚洲鲁鲁五月天| 亚洲经典三级| 国产久一道中文一区| 久久久久久久一区| 欧美freesex8一10精品| 亚洲一区二区成人在线观看| 亚洲欧美成人网| 亚洲国产成人av| 在线视频欧美一区| 在线观看中文字幕不卡| 亚洲人成人一区二区三区| 国产精品亚洲综合天堂夜夜| 久久综合久久久久88| 欧美日本中文字幕| 欧美怡红院视频| 欧美精品福利| 老司机午夜免费精品视频| 欧美成人精品影院| 久久精品国产99国产精品| 你懂的视频欧美| 久久精品视频在线免费观看| 欧美顶级大胆免费视频| 欧美一区三区三区高中清蜜桃| 久久婷婷色综合| 欧美亚洲三区| 欧美日韩精品免费观看视频| 久久人人97超碰精品888| 欧美日韩视频| 亚洲国产成人精品女人久久久| 国产美女一区| 亚洲美女视频网| 亚洲激情网站| 久久超碰97人人做人人爱| 在线视频免费在线观看一区二区| 久久精品论坛| 欧美中文在线视频| 国产精品九九久久久久久久| 亚洲国产精品高清久久久| 国内精品久久国产| 亚洲欧美国产不卡| 亚洲一区在线播放| 欧美日韩国产三区| 亚洲国产日韩在线一区模特| 伊人久久婷婷| 久久黄金**| 久久久久99精品国产片| 国产精品午夜国产小视频| 一区二区三区你懂的| 99re66热这里只有精品3直播| 久久人人97超碰精品888| 久久精品综合一区| 国产视频久久久久| 欧美一区二区啪啪| 久久久久久久国产| 国产综合香蕉五月婷在线| 亚洲欧美日韩国产另类专区| 香蕉久久精品日日躁夜夜躁| 国产精品久久久久aaaa九色| aa级大片欧美| 欧美亚洲三区| 国产午夜精品在线| 久久精品国产精品| 免费不卡视频| 亚洲人成7777| 欧美激情第3页| 99精品热视频只有精品10| 亚洲视频欧美在线| 国产精品日日做人人爱 | 亚洲国产另类久久久精品极度| 欧美在线看片a免费观看| 久久精品一二三| 激情综合色丁香一区二区| 久久综合色一综合色88| 亚洲国产欧美一区二区三区久久 | 亚洲精选在线| 亚洲一区国产精品| 国产欧美va欧美不卡在线| 欧美一级成年大片在线观看| 老司机亚洲精品| 99热这里只有成人精品国产| 国产精品hd| 欧美一区二区在线视频| 麻豆av一区二区三区久久| 亚洲精品在线免费| 国产精品www网站| 欧美在线二区| 亚洲日本欧美| 久久精品日产第一区二区三区| 一区二区三区无毛| 欧美三级乱码| 久久久久久久久一区二区| 91久久久久久国产精品| 午夜一区在线| 亚洲精品国产拍免费91在线| 国产精品三上| 欧美国产成人精品| 欧美在线黄色| 99国产精品久久| 免费亚洲婷婷| 性色av一区二区三区| 91久久久久久久久久久久久| 国产精品久久久久久久久久久久久久| 欧美一区亚洲二区| 亚洲毛片在线观看| 欧美mv日韩mv国产网站app| 亚洲一区二区三区精品视频| 在线观看福利一区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久 | 欧美视频日韩视频在线观看| 亚洲影院色无极综合| 欧美激情第10页| 久久久久.com| 亚洲欧美日韩精品综合在线观看| 国产麻豆精品久久一二三| 欧美成人一二三| 久久久久久久国产| 亚洲综合精品| 这里只有精品视频在线| 亚洲人体大胆视频| 欧美福利小视频| 久热综合在线亚洲精品| 欧美专区在线观看一区| 亚洲一区二区在线| 一区二区三区精品久久久| 亚洲国产一区二区三区在线播| 国产一区二区三区网站| 国产日韩欧美在线播放| 国产精品久久久免费| 欧美视频二区| 欧美亚州一区二区三区 | 欧美激情aaaa| 欧美jizzhd精品欧美喷水 | 欧美在线视频网站| 午夜精品影院| 欧美一区二区观看视频| 午夜欧美视频| 久久精品视频在线| 久久亚洲私人国产精品va| 久久乐国产精品| 久久亚洲视频| 欧美激情一二区| 欧美日韩调教| 国产精品毛片高清在线完整版| 国产精品美女xx| 国际精品欧美精品| 在线观看欧美精品| 亚洲日本国产| 一区二区三区日韩欧美| 亚洲综合电影一区二区三区| 香蕉免费一区二区三区在线观看| 香蕉久久国产| 免费成人av在线| 最新热久久免费视频| 一区二区国产日产| 欧美一区二区三区的| 久久久久久久综合狠狠综合| 欧美大色视频| 国产精品视频网| 极品裸体白嫩激情啪啪国产精品| 亚洲电影在线| 中文国产亚洲喷潮| 久久精品夜夜夜夜久久| 欧美激情国产日韩| 亚洲天堂男人| 蜜桃av噜噜一区| 国产精品久久久久久久浪潮网站| 国产在线日韩| 一本色道久久加勒比精品| 午夜欧美电影在线观看| 女人色偷偷aa久久天堂| 亚洲理论在线| 久久国产天堂福利天堂| 欧美美女日韩| 精品福利免费观看| 亚洲一区二区三区久久| 久久综合色婷婷| 一道本一区二区| 免费成人av在线| 国产日韩av高清| 一区二区三区黄色| 美女福利精品视频| 亚洲一级网站| 欧美精品久久一区二区| 韩日成人在线| 午夜精品一区二区三区在线| 欧美激情一区二区在线| 亚洲影院一区| 欧美午夜一区二区| 亚洲精品日韩在线| 裸体女人亚洲精品一区| 亚洲综合国产| 国产精品久久久久久久久久尿|