題目大意:一條數軸上有n個機械人,對其進行m次操作。操作t_i commond k_i x_i (1≤k_i≤n)
表示ti時刻將第ki個機械人的速度變為正方向上xi格每秒;操作t_i query
則是詢問ti時刻離原點最遠的機械人到原點的距離(t1≤t2≤t3≤…≤tm,若同一時間發生多次操作,則按讀入順序依次執行)
題解:以時間為x軸,位置座標為y軸,commond操作相當於在其中加入一段直線,query操作就是詢問某一橫座標對應的y的最大值或最小值的絕對值。離散時間建兩棵線段樹,分別維護最上方和最下方的線段。超哥線段樹簡單題。
code(第一棵超哥線段樹,**參考大神咯t^t,加了一點注釋,算是我自己對超哥線段樹(標記永久化?)的理解)
#include
#include
#include
#include
#include
#define n 600005
using namespace std;
inline int
read()
while (c>='0'&&c<='9')
return num*f;
}inline long long readl()
while (c>='0'&&c<='9')
return num*f;
}struct optq[n];
long long tagk[n<<2],tagb[n<<2],tagk[n<<2],tagb[n<<2];
long long nowk[100005],nowb[100005],b[n],ans1,ans2;
int a[100005],n,m,cnt,num;
bool flag[n<<2],flag[n<<2];
double cross(long long k1,long long b1,long long k2,long long b2) //求兩條直線(斜截式)的交點的橫座標
void ins_mx(int now,int l,int r,int l,int r,long long b,long long k) //維護最上方的直線
long long f1=b+k*b[l],f2=tagb[now]+tagk[now]*b[l]; //新插入直線和當前覆蓋該區間的直線的左端點的值
long long f3=b+k*b[r],f4=tagb[now]+tagk[now]*b[r]; //新插入直線和當前覆蓋該區間的直線的右端點的值
if (f1<=f2&&f3<=f4) return; //新直線完全在當前直線之下,丟棄
if (f1>=f2&&f3>=f4) //新直線完全在當前直線之上,替換
double xx=cross(k,b,tagk[now],tagb[now]);
if (f1>=f2) //交點左側新直線更高,右側當前直線更高
else /*同理*/
return;
}if (l<=mid) ins_mx(now<<1,l,mid,l,r,b,k);
if (r>mid) ins_mx(now<<1|1,mid+1,r,l,r,b,k);
}void ins_mn(int now,int l,int r,int l,int r,long long b,long long k)
long long f1=b+k*b[l],f2=tagb[now]+tagk[now]*b[l];
long long f3=b+k*b[r],f4=tagb[now]+tagk[now]*b[r];
if (f1>=f2&&f3>=f4) return;
if (f1<=f2&&f3<=f4)
double xx=cross(k,b,tagk[now],tagb[now]);
if (f1<=f2)
else
return;
}if (l<=mid) ins_mn(now<<1,l,mid,l,r,b,k);
if (r>mid) ins_mn(now<<1|1,mid+1,r,l,r,b,k);
}void query_mx(int now,int l,int r,int
pos) //查詢最大值
void query_mn(int now,int l,int r,int
pos)
int main()
num=m; b[++num]=0; sort(b+1,b+num+1); cnt=unique(b+1,b+num+1)-b-1;
for (int i=1;i<=m;i++)
if (q[i].op==1)
for (int i=1;i<=n;i++)
for (int i=1;i<=m;i++)
if (q[i].op==0)
return
0;}
bzoj3938 Robot(超哥線段樹)
小q有n只機械人,一開始他把機械人放在了一條數軸上,第i只機械人在ai的位置上靜止,而自己站在原點。在這之後小q會執行一些操作,他想要命令乙個機械人向左或者向右移動x格。但是機械人似乎聽不清小q的命令,事實上它們會以每秒x格的速度勻速移動。看著自己的機械人越走越遠,小q很著急,他想知道當前離他 原點...
bzoj3280 小R的煩惱
description 小r最近遇上了 煩,他的程式設計掛科了。於是他只好找程設老師求情。善良的程設老師答應不掛他,但是要求小r幫助他一起解決乙個難題。問題是這樣的,程設老師最近要進行一項 的實驗來證明p np,這個實驗一共持續n天,第i天需要a i 個研究生來給他搬磚。研究生畢竟也是人,所以僱傭研...
bzoj 3280 小R的煩惱
題意 n天,m個學校,k個醫院。每天需要a i 個人,這a i 個人工作後處於瀕死狀態,你可以選擇把瀕死狀態的人送去醫院,治好後還可以繼續工作。每個醫院i救治乙個人需要d i 天,費用q i 元。學校 i 中乙個人工作一天薪酬為p i 思路 時間為乙個天然序,第i天的決策為從健康的人中選擇a i 個...