這題挺簡單的 不過錯的很玄學用公式 sin(a+x)=sina*cosx+sinx*cosa cos(a+x)=cosa*cosx-sina*sinx就行 維護sinx的和和cosx的和更新就行了 需要注意的是常數比較大 三角函式的值盡量只算一次 傳遞下去就行 然後玄學的地方是 我把lazy[x]+=val;放到cal函式裡面會wa 把它單獨拿出來寫就能過 不知道為什麼
#include#include#include#include#include#define ri register int
#define ls id<<1
#define rs ls|1
#define lson ls,l,mid
#define rson rs,mid+1,r
using namespace std;
const int n = 2e5+10;
typedef long long ll;
double sine[n<<2],cosi[n<<2];
int a[n];
ll lazy[n<<2];
inline int in()
inline void pushup(int id)
inline void cal(ri x,double sinv,double cosv)
inline void pushdown(ri id)
}void build(ri id,ri l,ri r)
int mid = l+r>>1;
build(lson);build(rson);
pushup(id);
}void update(ri id,ri l,ri r,ri l,ri r,ri val)
pushdown(id);
int mid = l+r>>1;
if(l<=mid) update(lson,l,r,val);
if(r>mid) update(rson,l,r,val);
pushup(id);
}double query(ri id,ri l,ri r,ri l,ri r)
int mid = l+r>>1;
double ret = 0;
pushdown(id);
if(l<=mid) ret+=query(lson,l,r);
if(r>mid) ret+=query(rson,l,r);
return ret;
}int main()else
} return 0;
}
2651 區間和的和
輸入乙個長度為n的陣列a包括 n 1 n 2 個區間。每個區間所有數的和,被稱為區間和,求所有 n 1 n 2 個區間和的和。由於數值較大,輸出mod 1e9 7的結果。例如 3個數1 2 3,共有6個子區間,包含的數字如下 這些區間求和為1 2 3 3 5 6,這6個數字再求和為20.求出每個位置...
洛谷 P1712 區間
在數軸上有 n個閉區間 l1,r1 l2,r2 ln,rn 現在要從中選出 m 個區間,使得這 m個區間共同包含至少乙個位置。換句話說,就是使得存在乙個 x,使得對於每乙個被選中的區間 li,ri 都有 li x ri。對於乙個合法的選取方案,它的花費為被選中的最長區間長度減去被選中的最短區間長度。...
327 區間和的個數
今天的題目還是看了一陣子 我是鏈結 意思是任意子區間內所有元素的和要在lower和upper之間,可以取等 所以題目中 0,0 2,2 都指向各自位置的元素,0,2 就是從第0個元素 一直加到 第2 個元素 等於 2 所以這就是為什麼輸出是3.class solution sum nums i fo...