poj 2777(線段樹的節點更新策略)

  1 /*
  2 之前的思想是用回溯的方式進行顏色的更新的!如果用回溯的方法的話,就是將每一個節點的顏色都要更新
  3 通過子節點的顏色情況來判斷父節點的顏色情況 !這就是TLE的原因!
  4 
  5 后來想一想沒有必要 !加入[a, b] 區間有p管轄,那么tree[p]的顏色值就是[a, b]所有點的顏色值!
  6 如果[a,b]的子區間[c,d]沒被跟新,那么tree[p]也是[c,d]的值!
  7 否則,在更新[c,d]區間的時候,一定會經過 p 點!然后由上到下更新p<<1 和 p<<1|1 的值!
  8 當找到[c,d]區間所對應的p‘時,并更新p’的值!、
  9 
 10 之前的剪枝是點返回, 后面的是線段返回,當然更快! 
 11 */ 
 12 #include<string> 
 13 #include<iostream> 
 14 #include<algorithm>
 15 #include<cstring>
 16 #include<cstdio>
 17 #define M 100005 
 18 using namespace std;
 19 
 20 
 21 int tree[4*M];
 22 
 23 int color[32];
 24 int L, T, O;
 25 
 26 
 27 void buildT(int ld, int rd, int p){
 28     if(ld<=rd){
 29         tree[p]=1;
 30         if(ld==rd)
 31            return ;
 32          int mid = (ld+rd)/2;
 33          buildT(ld, mid, p<<1);
 34          buildT(mid+1, rd, p<<1|1);
 35     }
 36 }
 37 
 38 
 39 
 40 void updateT(int ld, int rd, int a, int b, int p, int k){
 41     if(tree[p] == k) return ;//如果當前更新的顏色和 之前p所管轄的區間的顏色相同,則返回 
 42     
 43     if(ld==a && rd==b){//p所管轄的區間的點的顏色全部是k!如果其子區間的顏色被更改,那么 
 44         tree[p]=k;     //在更新子區間的時候一定會經過 p點,讓后通過p更新 p<<1 和 p<<1|1 子區間的顏色! 
 45         return ;
 46     }
 47     
 48     if(tree[p]!=-1){//也就是在經過父節點時更新子節點的顏色狀態,也就是[a,b]包含在 p點所管轄的區間內 
 49        tree[p<<1] = tree[p<<1|1] = tree[p];
 50        tree[p]=-1;
 51     }
 52     if(ld<rd){
 53        int mid = (ld+rd)/2;
 54        if(mid<a)
 55          updateT(mid+1, rd, a, b, p<<1|1, k);
 56        else if(mid>=b)
 57          updateT(ld, mid, a, b, p<<1, k);
 58        else{
 59           updateT(ld, mid, a, mid, p<<1, k);
 60           updateT(mid+1, rd, mid+1, b, p<<1|1, k);
 61        }
 62     }
 63 }
 64 
 65 void queryT(int ld, int rd, int a, int b, int p){
 66    if(ld>rd) return ;
 67    if(tree[p]!=-1){
 68          color[tree[p]]=1; 
 69    }
 70    else{
 71        int mid = (ld+rd)/2;
 72        if(mid<a)
 73          queryT(mid+1, rd, a, b, p<<1|1);
 74        else if(mid>=b)
 75          queryT(ld, mid, a, b, p<<1);
 76        else{
 77           queryT(ld, mid, a, mid, p<<1);
 78           queryT(mid+1, rd, mid+1, b, p<<1|1);
 79        }
 80    }
 81 }
 82 
 83 int main(){
 84    
 85    while(scanf("%d%d%d", &L, &T, &O)!=EOF){
 86       buildT(1, L, 1);
 87       while(O--){
 88          char ch[2];
 89          int a, b, c;
 90          scanf("%s", ch);
 91          if(ch[0]=='C'){
 92              scanf("%d%d%d", &a, &b, &c);
 93              if(a>b){
 94                a^=b;
 95                b^=a;
 96                a^=b; 
 97             }  
 98              updateT(1, L, a, b, 1, c);
 99          }         
100          else{
101             scanf("%d%d", &a, &b);
102             if(a>b){
103                a^=b;
104                b^=a;
105                a^=b; 
106             } 
107             memset(color, 0, sizeof(color));
108             queryT(1, L, a, b, 1); 
109             int cnt=0;
110             for(int i=1; i<=T; ++i)
111                if(color[i]) ++cnt;
112             printf("%d\n", cnt);
113          }
114       }
115    }
116    return 0;
117 }

?

轉載于:https://www.cnblogs.com/hujunzheng/p/3872563.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531897.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531897.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531897.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言計算機編程例題詳解,計算機C語言編寫程序題及答案解析精選.doc

計算機C語言編寫程序題及答案解析精選2011年計算機二級C語言編寫程序題及答案解析精選【4.1】已知銀行整存整取存款不同期限的月息利率分別為&#xff1a;0.315% 期限一年0.330% 期限二年月息利率 &#xff1d; 0.345% 期限三年0.375% 期限五年0.420% 期限八年要求輸入存錢的本…

mfsort shell語法_Shell中字符串排序的幾種方法

Shell中字符串排序的幾種方法【方法一】按ASCII正向排序備注:1) tr將子字符串中的空白轉換為換行符&#xff0c;再用sort排序2) sort無參的話&#xff0c;默認按ASCII正向排序【方法二】按ASCII正向排序備注:1) -r參數: 按ASCII碼反向排序2) 在使用sort,uniq等組合命令時候【方…

java中并不是任意多個接口都可以實現多實現

interface A{public abstract void show(); }interface B{public abstract int show(); }public class Test implements A, B{public void show(){System.out.println("A show!");}/*只寫 void show&#xff08;&#xff09;出現的問題&#xff1a;Test不是抽象的, 并…

變形監測期末復習_寒假即將來臨,中小學期末考試時間是什么時候?

2019年下學期也快結束&#xff0c;各個區的中小學考試時間安排已經公布了。今年&#xff0c;初二將首次進行全市統考&#xff0c;統考的意義重大&#xff0c;希望家長們可以督促孩子們重視起來&#xff0c;考出好成績!下面&#xff0c;讓我們來看一下2019下學期深圳各區中小學期…

c語言2048項目報告,c語言----項目_小游戲2048

2048 小游戲 主要是針對邏輯思維的一個訓練.主要學習方面:1.隨機數產生的概率.2.行與列在進行移動的時候幾種情況.3.messagebox的使用#include #include #include #include using namespace std;int board[4][4] {0}; //二維數組int if_need_rand; //是否生成隨機數int if_gam…

java中的顯示初始化和特定初始化

public class Test{public static void main(String[] args){Child child new Child();} }class Parent{public Parent(){super();show();//this.show(); 因為是Child類對象調用了super()來構造其父類的部分;所以父類中的this&#xff08;隨著其構造方法入棧的&#xff09;是指…

etl工程師 面試題_數據倉庫工程師面試題筆試.doc

數據倉庫工程師面試題姓名&#xff1a;____張小核______ 開始時間&#xff1a;_____:______ 結束時間&#xff1a;_____:_____數據庫使用過哪些數據庫&#xff1f;試說出它們的異同。答&#xff1a;使用過SQL SERVER和ORACLE它們的區別是&#xff1a;1.sql server 是中小型企業…

為什叫c語言,為什么c語言叫c語言?

1972年&#xff0c;美國貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言&#xff0c;他取了BCPL的第二個字母作為這種語言的名字&#xff0c;這就是C語言。1973年初&#xff0c;C語言的主體完成。Thompson和Ritchie用它完全重寫了UNIX。隨著UNIX的發展&…

java中對象的初始化過程

class Parent{int num 8;// ->3Parent(){//super(); // ->2//顯示初始化 // ->3//構造代碼段 // ->4show(); // ->5}{// ->4System.out.println("Parent constructor code run->");}public void show(){//被覆蓋System.out.println(&quo…

馬斯克翻跟頭機器人_馬斯克又搞事情 用VR訓練機器人模仿人類動作

據該公司的開發者介紹&#xff1a;“我們已經研發了一款新算法——單次模仿學法算法。” 人們先在VR中完成一次操作&#xff0c;隨后機器人通過觀看視頻來模仿人類的行為。為了證明該算法&#xff0c;設計者進行了堆疊彩色方塊實驗。人類在VR環境中按順序移動方塊。機器人首先通…

c語言通過指針變量輸出10個元素,C語言程序設計第2版指針程序設計(10頁)-原創力文檔...

C 語言程序設計 - 理論方法與實踐(第 2 版) 7.4.1 簡單指針變量作函數參數 例 7-9 用比較交換法 &#xff0c;將一維數組的最 大值移到數組的最 末元素位置&#xff0c;交換 過程用上述 swap() 函數實現。 #include int main() { void swap(int *,int *); int i,a[10]{33,-12,9…

java中對象多態時成員變量,普通成員函數及靜態成員函數的調用情況

/* 樣例1&#xff1a;class Parent{int num 3;}class Child extends Parent{int num 4;} *//* 樣例2&#xff1a; class Parent{}class Child extends Parent{int num 4; } *//* 樣例3&#xff1a; class Parent{void show(){System.out.println("Parent Show!");…

gddr6速率_Rambus展示18GT/s的GDDR6內存子系統:高頻信號純凈度仍然非常好

Rambus最近展示了他們最新的GDDR6內存子系統&#xff0c;把傳輸速率提升到了18GT/s&#xff0c;而目前的市場上的GDDR6顯存多為14GT/s&#xff0c;少數為16GT/s&#xff0c;18GT/s對于Rambus和GDDR6來說都是一個新的記錄。在18GT/s的傳輸速率下&#xff0c;單顆位寬為32-bit的G…

桶排序算法c語言10個數組,桶排序算法

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓//2.21 桶排序#include#include#define SIZE 100void bucket_sort(unsigned *,int);//桶排序函數的原型void print(unsigned *,int);//打印函數的原型int main(){unsigned array[SIZE];int i0;//為數組元素隨機賦值for(i0;iarray[i…

diabetes影響因子2017_Journal of Diabetes

英文簡介&#xff1a;Journal of Diabetes (JDB) devotes itself to diabetes research, therapeutics, and education. It aims to involve researchers and practitioners in a dialogue between East and West via all aspects of epidemiology, etiology, pathogenesis, ma…

java中泛型上限,下限應用

v 一.程序中無形之中用到的泛型import java.util.*; class Person implements Comparable<Person>{String name;int age;Person(){name "";age 0;}Person(String name, int age){this.name name;this.age age;}public String toString(){return name &quo…

株洲c語言培訓機構,株洲好就業的學c語言程序設計,計算機專業地址

株洲好就業的學c語言程序設計衡陽市瀟湘職業中等專業學校是由衡陽市教育主管&#xff0c;在衡陽校區的基礎上設置的一所綜合性全日制中等職業學校。坐落在國內優秀旅游城市、國內高新技術產業基地、名人輩出的全國歷史文化名城-----衡陽市。我校依托長沙醫校院&#xff0c;實現…

er圖外鍵怎么表示_本周話題:取消考研復試最能實現相對公平?你怎么看?

2020取消研究生復試的呼聲越來越高&#xff1f;考研er們&#xff1a;壓力太大&#xff01;近日&#xff0c;紅網作者李詩元的一篇《取消考研復試最能實現相對公平》引起熱議國家線的出臺和調劑系統5月20日的才開的通知讓大家直接炸開了郭就山西大學來說 往年都是調劑生和一志愿…

java中匿名類的注意細節

abstract class Outer{int num;public Outer(int x){num x;}public abstract void show1();public abstract void show2(); }public class PC{public static void main(String[] args){new Outer(55)//構造父類部分//子類重寫部分{public void show1(){System.out.println(num…

ios沙箱模式開啟_iOS沙盒篇

iOS系統在安全性上的一大亮點就是沙盒。每個iOS應用SDK都被限制在沙盒中&#xff0c;我們可以把沙盒當成一個設置了僅當前SDK可以訪問的文件夾&#xff0c;蘋果對沙盒有以下幾條限制&#xff1a;應用程序可以在自己的沙盒中運行&#xff0c;但不能訪問任何其他應用程序的沙盒。…