題目:
題意:給一段序列,27000次詢問l到r區間有多少對(i,j)(i分析:首先分析可知,每增加乙個數x,答案就會增加num(x−k<=i<=x+k),減少同理減少這麼多。所以離散化+莫隊+樹狀陣列就完事了,總複雜度o(
ac code:
#includeusing namespace std;
const int maxn=1e5+5;
typedef long long ll;
ll ans,k;
struct node
;node q[maxn];
int c[maxn];
int a[maxn];
vectorb;
int lpos[maxn],rpos[maxn];
int belong[maxn];
int lowbit(int x)
ll getsum(int x)
return ans;
}void update(int x,int val)
}bool cmp1(node &a,node &b)
sort(q+1,q+m+1,cmp2);
for(int i=1; i<=m; i++)
printf("%lld\n",q[i].ans);
return 0;
}
HDU 3743 樹狀陣列,離散化
其實,我也知道這道題是求逆序數來做的,但是問題來了,怎麼求逆序數,常規的解法肯定是不行的,因為資料量很大,那麼想到能用線段樹來做,是可以的,不過我還沒敲過,既然在看樹狀陣列就用這個做。又因為資料可以達到一百萬,並且資料又用不到,所以可以對資料進行離散化 include include include...
hdu 5877(樹狀陣列 離散化)
題意 查詢節點與它的父親節點相乘小於k的種類數。思路 用乙個樹狀陣列維護,查詢的話就是它的父親節點小於k a i 的個數。當跑完這個分支之後,要對他進行清除操作。ps 數比較大,需要離散化。include include include include include include include...
離散化 樹狀陣列
題目描述 erwin最近對一種叫 thair 的東西巨感興趣。在含有n個整數的序列a1,a2 an中,三個數被稱作 thair 當且僅當i求乙個序列中 thair 的個數。輸入格式 開始乙個正整數n,以後n個數a1 an。輸出格式 thair 的個數 思路 列舉中間的數字,求排在它前面,小於它的有幾...