題意:
在乙個棋盤上有一些"車",他能夠攻擊到與它同一行或者同一列的棋盤上的所有的格仔,現在給出k個棋子的座標,然後有q組詢問,每一次詢問(x1,y1,x2,y2)這個方格內的所有棋子是否能夠全部被攻擊到。
思路:每讀入乙個車,對其橫座標和縱座標都維護乙個攻擊範圍。然後查詢的時候,如果sum(x2) - sum(x1-1) == x2-x1+ 1,說明全部的行都在攻擊範圍以內,輸出yes。列同理。利用樹狀陣列求區間和。
#include #include #include #include #pragma comment(linker, "/stack:102400000,102400000")
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 100000+5;
using namespace std;
int n,m,k,q;
int visx[maxn], visy[maxn], c[2][maxn];
inline int lowbit(int x)
void add(int x, int v, int u)
int sum(int x, int u)
int main()
for(int i = 0; i < q; ++i)
} fclose(stdin);
return 0;
}
hdu5919 主席樹求區間不同數
題目大意 有長度為 n l r 這段區間中所有不同數出現的第乙個位置,按照位置從小到大排完序以後的中間 向上取整 的那個位置是多少?解題思路 把n個元素倒著插進主席樹中,把上次出現的同乙個值的元素的貢獻值 1,新的這個值的貢獻值 1,這樣就可以把這個元素最左側的位置的貢獻保留。查詢區間 l,r 時只...
hdu1754 求區間最值 線段樹 樹狀陣列
題意不用解釋了 線段樹 include include using namespace std define lson l m rt 1 define rson m 1 r rt 1 1 const int maxn 222222 int max maxn 2 void pushup int rt ...
hdu1540(線段樹求連續區間最大和)
題意 最初1 2 3 n按照順序每個點與相鄰的和兩點相連成一條鏈。三種操作d 毀掉x r 恢復上次毀掉的 q 查詢與x直接相連或者間接相鄰的數量 包括自己 題目型別 線段樹求區間連續最大和的模板題目 思路 維護區間從左端點開始最大連續個數lsum,以及當前區間從右端點開始最大連續的個數rsum。重點...