時間限制:c/c++ 2秒,其他語言4秒
空間限制:c/c++ 262144k,其他語言524288k
64bit io format: %lld
給乙個長度為n的陣列a,給定乙個d,q,接下來有q次詢問,每次詢問區間 [l, r]內有多少子區間,其區間和大於等於d
q行每行乙個數字表示答案
示例1
複製
5 3 2
1 2 3 4 5
1 32 4
複製
4
5
【題意】
首先,預處理nex陣列,nex[i]代表著從i點向右擴充套件,區間和恰好大於等於d時的下標。
那麼每次查詢l,r的時候,只要將l,r間的nex陣列取出來。答案就是num*r-sum+num;num代表著l,r區間內,nex陣列小於r的個數,sum代表著nex數小於r的數之和。
num*r-sum+num:(r-
【**】
#include#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define mem(a,x) memset(a,x,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
const int n=3e5+10;
int nex[n];
ll a[n];
int ls[n*40],rs[n*40],rt[40*n],num[n*40];
ll sum[n*40];
int n,d,q,cnt;
void up(int pre,int &o,int l,int r,int pos,int val)
ll qu1(int o,int l,int r,int ql,int qr)
int qu2(int o,int l,int r,int ql,int qr)
int main()
int l=1,r=1;
ll sum=a[l];
while(l<=n)
}
合併子區間
輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 核心思想是 1.根據所有區間的開始位置進行排序 2.如果當前區間的開始比上乙個區間的結束小,則進行合併 3.不斷重複2 4.新增最後乙個區間 python 實現...
重疊子區間問題
新的一天,新的刷題記錄。leetcode 435 無重疊區間 給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大於它的起點。區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。示例 輸入 1,2 2,3 3,4 1,3 輸出 1解釋 移除 1,...
區間第k大(主席樹)
學了一下主席樹模板題,當初看了網上的主席樹講解都沒有看懂,後面看了嗶哩嗶哩的uestc的主席樹,終於看懂了思想。每次更新的複雜度都為logn。每次更新的話就是對要更新的點路徑上的點重新更加乙個,然後進行對沒有影響的那些進行連邊。然後用乙個root記錄每乙個線段樹的根節點下標。include incl...