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

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 閱讀(7783) 評論(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>
            亚洲电影免费观看高清| 欧美a级在线| 欧美在线啊v| 亚洲欧美日韩一区二区在线| 一区二区三区视频在线| 亚洲国产精品va在线看黑人| 国产欧美va欧美va香蕉在| 国产欧美日韩综合| 激情欧美一区| 日韩午夜视频在线观看| 亚洲一二三区在线| 亚洲欧美三级伦理| 久久久久久久一区| 欧美成人免费视频| 久热国产精品视频| 国产精品综合视频| 国产一区亚洲一区| 黄网动漫久久久| 亚洲激情女人| 亚洲日本中文字幕区 | 国内综合精品午夜久久资源| 国产亚洲va综合人人澡精品| 在线电影欧美日韩一区二区私密| 亚洲激情av| 亚洲精品视频二区| 欧美亚洲综合另类| 欧美国产丝袜视频| 亚洲综合电影| 欧美风情在线观看| 国产精品揄拍500视频| 亚洲欧洲久久| 久久精品国产精品亚洲精品| 亚洲精一区二区三区| 久久久久国产精品一区| 欧美日本国产视频| 在线日韩av片| 欧美在线精品免播放器视频| 亚洲欧洲在线观看| 久久男人av资源网站| 国产精品家教| av成人动漫| 亚洲国产导航| 久久久久久亚洲精品杨幂换脸 | 欧美一区日本一区韩国一区| 欧美久久综合| 91久久精品www人人做人人爽| 欧美一区二区三区的| 亚洲免费观看| 欧美成人亚洲成人| 亚洲第一区中文99精品| 性xx色xx综合久久久xx| 日韩亚洲国产精品| 欧美激情综合网| 亚洲欧洲一区二区在线播放| 久久嫩草精品久久久精品一| 亚洲欧美不卡| 国产女主播一区二区| 亚洲免费视频在线观看| 日韩一级二级三级| 欧美精品免费观看二区| 亚洲精品久久久久| 亚洲国产高清在线| 欧美福利视频在线观看| 亚洲精品欧美激情| 亚洲第一精品在线| 欧美成人国产一区二区 | 久久激情网站| 欧美有码在线观看视频| 国产精品毛片大码女人| 亚洲视频一区二区免费在线观看| 亚洲激情网站| 欧美三级不卡| 亚洲欧美日本日韩| 亚洲女ⅴideoshd黑人| 国产亚洲激情视频在线| 久久免费99精品久久久久久| 久久久久一区| 日韩午夜av电影| 99国产精品久久久久老师| 欧美日韩视频在线一区二区 | 99pao成人国产永久免费视频| 91久久国产精品91久久性色| 欧美精品aa| 午夜久久tv| 久久久蜜桃精品| 亚洲精品日韩欧美| 亚洲色诱最新| 亚洲电影第1页| 一本色道久久综合| 好吊妞**欧美| 亚洲精品影视在线观看| 国产欧美欧美| 亚洲国产毛片完整版| 国产精品久久久久久久一区探花| 久久精品最新地址| 欧美精品www在线观看| 欧美一区在线视频| 欧美成人按摩| 久久精品一本久久99精品| 久久中文欧美| 性色av一区二区三区在线观看| 久久久久国产精品一区| 亚洲手机视频| 牛牛精品成人免费视频| 欧美自拍偷拍| 欧美午夜电影在线| 欧美黄色aa电影| 国产日韩欧美一区在线| 亚洲人体一区| 在线免费观看日韩欧美| 国产精品99久久久久久久久| 亚洲第一主播视频| 小处雏高清一区二区三区| 日韩视频一区二区在线观看 | 欧美日韩亚洲一区二| 久久蜜臀精品av| 国产精品社区| 亚洲精选中文字幕| 亚洲精品偷拍| 美女在线一区二区| 久久久一区二区三区| 国产精品美腿一区在线看| 午夜精品久久久久久久99黑人| 亚洲国产女人aaa毛片在线| 亚洲专区一区二区三区| 9国产精品视频| 老巨人导航500精品| 久久精品日产第一区二区| 国产精品海角社区在线观看| 亚洲日本久久| 亚洲乱码国产乱码精品精可以看| 久久久国产视频91| 久久久999国产| 国产视频精品免费播放| 亚洲欧美日韩精品久久奇米色影视| 亚洲少妇最新在线视频| 欧美久久一区| 日韩一区二区精品葵司在线| 99精品视频一区二区三区| 欧美高清在线一区| 最新日韩欧美| 在线一区二区日韩| 欧美日韩综合久久| 9l国产精品久久久久麻豆| 亚洲午夜精品一区二区三区他趣| 欧美日韩高清在线一区| 亚洲乱码一区二区| 亚洲一区二区日本| 国产精品免费一区二区三区观看| 中日韩高清电影网| 欧美一区二区三区四区高清| 国产日韩欧美自拍| 久久激情五月激情| 欧美黑人多人双交| 一区二区三区精品视频在线观看| 欧美日韩亚洲一区二区三区四区| 亚洲视频你懂的| 欧美中文字幕在线播放| 国产一区二区按摩在线观看| 久久久噜噜噜久噜久久| 亚洲黄色免费| 亚洲免费在线观看| 国内外成人免费激情在线视频网站| 久久精品国产久精国产爱| 蜜臀久久99精品久久久画质超高清| 91久久精品国产91性色tv| 欧美日韩一区二区三区四区在线观看| 久久九九99视频| 免费在线视频一区| 99精品国产高清一区二区| 亚洲欧美日韩一区二区三区在线| 国产亚洲一区在线播放| 玖玖玖国产精品| 日韩一级网站| 久久综合伊人77777| 亚洲人成绝费网站色www| 国产精品wwwwww| 久久久精彩视频| 99日韩精品| 麻豆国产精品va在线观看不卡| 99pao成人国产永久免费视频| 国产情侣久久| 欧美精品自拍偷拍动漫精品| 午夜精品视频一区| 亚洲国产专区| 久久综合网络一区二区| 亚洲一区二区三区视频| 亚洲国产人成综合网站| 国产麻豆精品久久一二三| 欧美成人精品在线观看| 久久av资源网站| 亚洲视频一区二区免费在线观看| 欧美国产专区| 亚洲精品乱码久久久久| 最新日韩在线| 国产欧美日韩亚洲精品| 欧美日韩成人一区| 久久欧美肥婆一二区| 亚洲永久网站| 日韩午夜激情av|