區間增加等差序列,似乎不好維護,等差等差,那就差分唄,單點查詢,更加肯定,直接差分,每次加了乙個等差序列容易發現只需要對應的差分陣列a[l]+=k,a[l+1]...a[r]+=d,a[r+1]-=(r-l)*d+k
查詢輸出a[1]+a[2]...a[p],然後用線段樹維護一下,這個題就做完了。(敲得也是十分順利,寫完直接過編譯還輸出了正確答案)(不開longlong見祖宗)
**:
#include #include #include #include #define ls(x) x<<1
#define rs(x) x<<1|1
const int n=1e5+5;
using namespace std;
int n,m,a[n];
namespace segment
smt()
}e[n<<2];
void update(int x)
void pushup(int x,int v)
void down(int x) }
void build(int x,int l,int r)
int mid=(l+r)>>1;
build(ls(x),l,mid);
build(rs(x),mid+1,r);
update(x);
} void modify(int x,int l,int r,int v)
down(x);
int mid=(e[x].l+e[x].r)>>1;
if(l<=mid)
modify(ls(x),l,r,v);
if(r>mid)
modify(rs(x),l,r,v);
update(x);
} long long query(int x,int l,int r) }
using namespace segment;
int main()
else
}return 0;
}
2022春每日一題 Day 9
思維題,差分好題,每次區間操作,對應差分a l v,a r 1 v,在差分陣列中一定有乙個正負號抵消,那麼我們求出差分陣列中正數 負數 和,記做s1,s2。顯然,當s1,s2為0時,剩下的沒有歸0的元素只能與a 1 或a n 配,答案就是abs s1 s2 min s1,s2 也就是max s1,s...
2022春每日一題 Day 10
每次操作 c i 變成c i 1 c i 1 c i 那麼顯然,c 1 和c n 是不會改變的,因此只要c 1 和t 1 c n 和t n 不相等,一定是輸出no。接著分析,不妨設x c i 1 y c i z c i 1 那麼x,y,z的差分為x,y x,z y,進行操作後數列變為x,x z y,...
2022春每日一題 Day 22
光看題幾乎沒有思路,但是顯然到最後每個人手中一定有 d s n個糖果 s為所有人糖果總和 不妨設2號給1號x2個糖果,3號給2號x3個.1號給n號x1個,那麼顯然a1 x1 x2 d,a2 x2 x3 d 這不就是個n元n次方程組,但是不是,最後乙個方程組可以由前面的方程組推出來,因此我們試著用x1...