離散化原來就是指把每個線段單獨提取出來,放到數組裏。這樣就不用考慮到它覆蓋的範圍了。
我用的是線段切割。。 做得還算順利。 還可以用線段樹做的~~
#include <cstdio> #include <algorithm> using namespace std; char op[3]; struct Interval { int start, end; bool operator < (const Interval& b) const{ if(start != b.start) { return start < b.start; } else { return end < b.end; } } }; Interval val[20001]; void white(int a, int b,int& cnt) { val[cnt].start = a; val[cnt].end = b; cnt++; } void black(int a, int b, int& cnt) { int tmp = cnt; for(int i = 0; i < cnt; i++){ if(val[i].start < a) { if( val[i].end >= a) { if(val[i].end <= b) { val[i].end = a-1; } else { val[tmp].start = b+1; val[tmp].end = val[i].end; tmp++; val[i].end = a-1; } } } else if(val[i].start <= b){ if(val[i].end <= b) { val[i].start = 0; val[i].end = -1; } else { val[i].start = b+1; } } } cnt = tmp; } int solve(int cnt, int& index) { sort(val, val+cnt); int max = val[0].end-val[0].start+1; for(int i = 1; i < cnt; i++) { if(val[i].start != 0) { if(val[i].start <= val[i-1].end+1) { if(val[i-1].end <= val[i].end) { val[i].start = val[i-1].start; } else { val[i].start = val[i-1].start; val[i].end = val[i-1].end; } } if(val[i].end-val[i].start+1 > max) { max = val[i].end-val[i].start+1; index = i; } } } return max; } int main() { int n, index, a, b; while(scanf("%d", &n) != EOF) { int cnt = 0; for(int i = 0; i < n; i++) { scanf("%d%d%s", &a, &b, op); if(a > b) { swap(a, b); } if(op[0] == 'w') { white(a, b, cnt); } else { black(a, b, cnt); } } index = 0; if(solve(cnt, index)) { printf("%d %d/n", val[index].start, val[index].end); } else { printf("Oh, my god/n"); } } return 0; }
用於衡量算法佔用內存空間隨着數據量變大時的增長趨勢。這個概念與時 間複雜度非常類似,只需將“運行時間”替換爲“佔用內存空間”。 算法在運行過程中使用的內存空間主要包括以下幾種。 ‧ 輸入空間:用於存儲算法的輸入數據。
初始化package main import ( "fmt" ) type person struct { Name string Age int } func main() { a := person{ Name:
http://acm.hdu.edu.cn/showproblem.php?pid=1086 判斷兩條線段是否相交。用叉乘來判斷。 #include <stdio.h> struct Lpoint { double x; doubl
作爲練習,自己編了一個: #include "stdafx.h" #include <iostream> #include <string> //#include <windows.h> using namespace std;
//file 鏈表的建立插入與刪除.cpp #include"iostream.h"#include"string.h"#include"stdlib.h" struct listnode{ //鏈表結點的類型聲明 int num; ch
//文件的讀與寫操作.cpp #include <iostream.h>#include"fstream.h"#include<stdlib.h> #define SIZE 2 typedef struct{ char name[10];
今天看了一下josephus問題,突然有點想寫些東西的衝動,結合自己的部份思想,於是便寫了這幾篇帖子。因爲有幾篇代碼有點長,就分開發吧。如果對你有什麼幫助的話,本人勝感欣慰。也許你會說,這個問題好多書上都有代碼,但本人詣在於用不同的方法寫
線性表的邏輯定義 線性表(Linear List)是由n(n≥0)個數據元素(結點)a1,a2,…,an組成的有限序列。 ① 數據元素的個數n定義爲表的長度(n=0時稱爲空表)。 ② 將非空的線性表(n>0)記作:
棧: 代碼 1 : stack #include <stdio.h> #include <stdlib.h> //類型 typedef struct node{ int *data; int top; i
from DUI0067D_ADS1_2_CompLib 3.13 type qulifiers 有部分摘自ARM編譯器文檔對齊部分對齊的使用:1.__align(num) 這個用於修改最高級別對象的字節邊界。在彙編中使用LDRD或
最近遇到了三道數形結合的題目,不同的動機都直接指向了凸包(凸殼),利用凸殼上斜率(極角)的單調性進行二分。 1 .一個在傻X那裏淘到的一道數據結構題,from spoj:
bzoj2395 以前聽基哥講的時候就沒怎麼懂,以爲好難寫好難寫 // 其實不難寫,只是有點難調。 利用數形結合的思想,每棵生成樹在座標系上對應的是點(sigma(a),si
有些算法學了很久沒有複習,今天重刷了兩道後綴數組的題,然後想找到AC自動機的題目,畢竟以前也沒寫過幾遍。 然後尷尬的發現去年noi的阿狸的打字機還沒寫,去年暑假因爲不懂AC自動機,沒有去動它,後來就一直忘記了
貌似好久沒寫總結了,都快不會寫了。 懶得分成幾篇了,就一起擠一擠吧。 另外, 這裏有分開寫的 http://blog.csdn.net/huyuncong?v
設備驅動程序是操作系統內核和機器硬件之間的接口,它爲應用程序屏蔽硬件的細節,一般來說,Linux的設備驅動程序需要完成如下功能: Ø 設備初始化、釋放; Ø 提供各類設備服務; Ø 負責內核和設備之間的