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

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(zhuǎn)載自 ______________白白の屋    

 

題目地址:

http://acm.hdu.edu.cn/showproblem.php?pid=1540

題目描述:

Tunnel Warfare

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1009    Accepted Submission(s): 334


Problem Description
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Except the two at the ends, every village was directly connected with two neighboring ones.

Frequently the invaders launched attack on some of the villages and destroyed the parts of tunnels in them. The Eighth Route Army commanders requested the latest connection state of the tunnels and villages. If some villages are severely isolated, restoration of connection must be done immediately!
 

Input
The first line of the input contains two positive integers n and m (n, m ≤ 50,000) indicating the number of villages and events. Each of the next m lines describes an event.

There are three different events described in different format shown below:

D x: The x-th village was destroyed.

Q x: The Army commands requested the number of villages that x-th village was directly or indirectly connected with including itself.

R: The village destroyed last was rebuilt.
 

Output
Output the answer to each of the Army commanders’ request in order on a separate line.
 

Sample Input
7 9 D 3 D 6 D 5 Q 4 Q 5 R Q 4 R Q 4
 

Sample Output
1 0 2 4
 

 題目分析:

題目有三種操作 :

D:  摧毀村莊

Q: 查詢相連的村莊

R: 修復(fù)上次被摧毀的村莊

這個(gè)題目的關(guān)鍵部分就是 對(duì)線段的修改部分, 也是最難的部分, 這部分理解了, 這個(gè)題目就基本會(huì)了.

  在結(jié)構(gòu)體里面, 需要保存 3個(gè)量, lVal : 從線段左端點(diǎn)能夠向右延伸的最大長度,

     rVal:從線段右端點(diǎn)能夠向左延伸的最大長度,

    mVal:當(dāng)前線段的最大連續(xù)長度

         seg[rt].mVal = max ( seg[LL].rVal + seg[RR].lVal, max ( seg[LL].mVal, seg[RR].mVal ) ); //當(dāng)前節(jié)點(diǎn)的最大連續(xù)長度 

         seg[rt].lVal = seg[LL].lVal + ( seg[LL].cov() ? seg[RR].lVal : 0 );   //當(dāng)前節(jié)點(diǎn)的左端點(diǎn)能夠向右延伸的最大長度 

         seg[rt].rVal = seg[RR].rVal + ( seg[RR].cov() ? seg[LL].rVal : 0 );   //當(dāng)前節(jié)點(diǎn)的右端點(diǎn)能夠向左延伸的最大長度  

查詢的時(shí)候也要注意幾種 情況 :  1 :  就是當(dāng)前整個(gè)線段

      2 :  橫跨 左右子樹

      3 :  只在 左 或 右 子樹

詳細(xì)請(qǐng)看代碼注釋. 

代碼如下 : 

代碼
/*
Mail to   : miyubai@gamil.com
Link      : http://www.cnblogs.com/MiYu  || http://www.shnenglu.com/MiYu
Author By : MiYu
Test      : 1
Complier  : g++ mingw32-3.4.2
Program   : 1540
Doc Name  : Tunnel Warfare
*/
//#pragma warning( disable:4789 )
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <utility>
#include <queue>
#include <stack>
#include <list>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
using namespace std;
inline int max ( int &a, int &b ) {
       
return a > b ? a : b;       
}
struct segTree {
       
int left, right, lVal, rVal, mVal; //lVal: 從線段左端點(diǎn)能夠向右延伸的最大長度
                                          
//rVal: 從線段右端點(diǎn)能夠向左延伸的最大長度 
                                          
//mVal: 當(dāng)前線段的最大連續(xù)長度 
       int mid () { return (left + right)>>1;}  
       
int dis () { return right-left+1; }  // 線段的長度 
       void prs (int flag) { lVal = rVal = mVal = flag ? 0 : dis(); }   //按flag標(biāo)記處理線段 
       bool cov () { return mVal == dis(); }   // 當(dāng)前線段是否被覆蓋 , 即 這條線段上的點(diǎn)沒有任何一點(diǎn)被破壞 
}seg[160000];
inline void creat ( int left, int right, int rt = 1 ) {
     
int LL = rt << 1, RR = rt << 1 | 1
     seg[rt].left = left;
     seg[rt].right = right;
     seg[rt].prs (0);
     
if ( left == right ) return
     
int mid = seg[rt].mid();      
     creat ( left, mid, LL );
     creat ( mid + 1, right, RR );     
}
inline void modify ( int pos, int flag, int rt = 1 ) {
     
int LL = rt << 1, RR = rt << 1 | 1
     
if ( seg[rt].left == seg[rt].right ) {
          seg[rt].prs ( flag ); return;      
     } 
     
int mid = seg[rt].mid();
     
if ( pos <= mid ) modify ( pos, flag, LL );
     
else modify ( pos, flag, RR );
     
// 經(jīng)典部分: 
     seg[rt].mVal = max ( seg[LL].rVal + seg[RR].lVal, max ( seg[LL].mVal, seg[RR].mVal ) ); //當(dāng)前節(jié)點(diǎn)的最大連續(xù)長度 
     seg[rt].lVal = seg[LL].lVal + ( seg[LL].cov() ? seg[RR].lVal : 0 );   //當(dāng)前節(jié)點(diǎn)的左端點(diǎn)能夠向右延伸的最大長度 
     seg[rt].rVal = seg[RR].rVal + ( seg[RR].cov() ? seg[LL].rVal : 0 );   //當(dāng)前節(jié)點(diǎn)的右端點(diǎn)能夠向左延伸的最大長度 
}
inline int query ( int pos, int rt = 1 ) {
    
if ( seg[rt].cov() || seg[rt].mVal == 0 || seg[rt].left == seg[rt].right )
        
return seg[rt].mVal;
    
int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();        
    
if ( pos <= mid ) {
         
if ( pos > mid - seg[LL].rVal )  // 查詢節(jié)點(diǎn)在左孩子節(jié)點(diǎn)所處的位置 
             return seg[LL].rVal + query ( mid+1, RR ); // 如果在線段的右端, 則還需要查詢右孩子節(jié)點(diǎn)的左端 
         else return query ( pos, LL );    //左端只需查詢左端 
    } else {
         
if ( pos <= mid + seg[RR].lVal )  // 同上 
             return seg[RR].lVal + query ( mid, LL );
         
else return query ( pos, RR );   
    }

inline int _getint(int &n){  //輸入加速 
 char c;for(c=getchar();!isdigit(c);c=getchar());for(;isdigit(c);c=getchar())n=n*10+c-'0';return n;
}
deque <int> st; // stack 沒有clear() 杯具了 
int main ()
{
    
int N, M;
    
char ask[3];
    
while ( scanf ( "%d%d"&N, &M ) == 2 ) {
           creat ( 1, N );
           st.clear();
           
while ( M -- ) {
                  scanf ( "%s",ask ); N = 0;
                  
switch ( ask[0] ) {
                         
case 'D':   _getint (N);
                                     modify ( N, 1 );
                                     st.push_back ( N );
                                     
break;
                         
case 'Q':   _getint (N);          
                                     printf ( "%d\n",query ( N ) );        
                                     
break;
                         
case 'R':   if ( st.empty() ) break;
                                     modify ( st.back(), 0 );
                                     st.pop_back();
                  }
           }
    }
    
return 0;
}

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品久久在线| 老司机免费视频一区二区三区 | 一本到高清视频免费精品| 亚洲成色精品| 亚洲大胆美女视频| 亚洲欧洲日韩在线| 在线一区欧美| 久久成人精品视频| 欧美成人高清视频| 国产精品国色综合久久| 国产一本一道久久香蕉| 亚洲国产美国国产综合一区二区| 亚洲精品国精品久久99热一| 中日韩美女免费视频网址在线观看| 亚洲欧美日韩国产| 裸体女人亚洲精品一区| 亚洲精品视频在线观看网站| 性色av一区二区三区红粉影视| 麻豆精品视频在线观看| 欧美色综合网| 亚洲高清久久网| 一本久久知道综合久久| 久久精品五月| 日韩一级精品| 美女999久久久精品视频| 国产精品久久久久影院亚瑟 | 亚洲欧美在线另类| 蜜臀av一级做a爰片久久 | 麻豆久久婷婷| 国产精品一区在线观看| 欧美日韩大片| 国语自产精品视频在线看一大j8| 亚洲国产导航| 久久久久高清| 亚洲综合丁香| 欧美视频免费| av不卡在线看| 亚洲电影观看| 久久精品在线观看| 国产精品视频免费观看| 99精品国产一区二区青青牛奶| 久久夜色精品国产欧美乱| 99精品欧美一区二区三区综合在线| 久久一二三四| 一区二区三区在线免费视频| 性色一区二区| av成人免费在线观看| 欧美 日韩 国产精品免费观看| 国内久久精品| 久久久综合网| 欧美中文字幕第一页| 国产精品一区免费视频| 亚洲影视在线播放| 一区二区三区免费网站| 欧美精品福利在线| 日韩亚洲成人av在线| 欧美激情视频一区二区三区免费| 久久久久国产精品一区三寸 | 亚洲肉体裸体xxxx137| 麻豆精品网站| 另类春色校园亚洲| 亚洲激情网站免费观看| 欧美成人性网| 欧美激情综合在线| 亚洲美女av网站| 亚洲巨乳在线| 国产精品网站视频| 久久久久综合网| 麻豆免费精品视频| 夜夜爽av福利精品导航| 99精品视频免费观看| 国产精品vvv| 欧美一区二视频在线免费观看| 午夜精品久久久久久久久久久久| 国产欧美精品在线播放| 久久久五月婷婷| 另类图片国产| 在线视频欧美日韩精品| 亚洲欧美国产视频| 影音先锋亚洲视频| 亚洲国产精品一区二区久| 欧美日韩高清一区| 亚洲综合视频一区| 午夜视频在线观看一区| 亚洲国产成人在线视频| 一本色道久久综合一区| 国产亚洲欧美另类中文| 亚洲经典三级| 亚洲综合精品| 国产精品国产三级国产| 国产精品区一区二区三| 久久精品99久久香蕉国产色戒| 久久精品人人做人人爽| 亚洲人人精品| 亚洲综合色激情五月| 91久久午夜| 欧美一区二区高清在线观看| 日韩图片一区| 久久99伊人| 亚洲一区二区三区四区五区午夜| 久久国产精品久久w女人spa| 亚洲视频观看| 模特精品裸拍一区| 久久久久女教师免费一区| 欧美日韩精品免费看| 久久亚洲一区二区三区四区| 国产精品啊v在线| 91久久久一线二线三线品牌| 国产婷婷色综合av蜜臀av| 亚洲人屁股眼子交8| 狠狠综合久久av一区二区老牛| 一区二区三区精品视频| 日韩一级成人av| 久久久最新网址| 久久久91精品国产| 国产精品欧美久久| 亚洲欧洲日产国产网站| 亚洲国产精品久久久久婷婷884| 香蕉视频成人在线观看 | 亚洲国产第一页| 欧美在线免费播放| 午夜精品福利在线观看| 欧美日韩视频在线| 亚洲三级影院| 夜夜狂射影院欧美极品| 欧美精品二区| 99v久久综合狠狠综合久久| 亚洲精品视频在线观看免费| 久久综合久久综合这里只有精品 | 亚洲视频精选| 中文国产一区| 欧美日韩小视频| 99在线观看免费视频精品观看| 亚洲狼人综合| 欧美日韩免费在线观看| 9人人澡人人爽人人精品| 一区二区三区毛片| 欧美日韩在线不卡| 亚洲永久视频| 玖玖国产精品视频| 亚洲国产成人tv| 男女激情久久| 99国产精品久久| 亚洲女爱视频在线| 国产欧美成人| 久久―日本道色综合久久| 欧美高清日韩| 亚洲深夜福利| 国产自产在线视频一区| 麻豆精品网站| 一区二区三区四区国产| 欧美亚洲综合在线| 精品91久久久久| 在线看片成人| 亚洲综合色丁香婷婷六月图片| 午夜精品电影| 狠狠色伊人亚洲综合成人| 久久久久在线观看| 亚洲黄网站在线观看| 中文一区二区| 韩国久久久久| 欧美日韩国产黄| 欧美亚洲免费电影| 亚洲高清av在线| 午夜视频久久久| 亚洲高清视频在线观看| 欧美日韩久久| 欧美一区二区三区四区视频| 欧美国产一区视频在线观看 | 激情综合视频| 欧美国产高清| 午夜综合激情| 亚洲精品一区二区三区樱花| 欧美在线电影| 一区二区三区欧美| 亚洲欧洲日本专区| 国产日韩欧美综合在线| 欧美—级在线免费片| 欧美一区二区在线视频| 日韩视频在线观看国产| 免费永久网站黄欧美| 亚洲欧美在线网| 一本色道久久综合亚洲91| 国产在线不卡| 国产精品欧美精品| 欧美日韩国产一区二区三区| 巨乳诱惑日韩免费av| 性欧美videos另类喷潮| 一区二区欧美日韩视频| 亚洲片在线资源| 亚洲电影第1页| 欧美风情在线观看| 久久久久久69| 久久午夜电影网| 久久久精品一品道一区| 久久av一区二区| 欧美一区二区三区免费观看视频| 艳妇臀荡乳欲伦亚洲一区| 樱桃成人精品视频在线播放| 国产欧美视频一区二区三区|