HDU 4417-Super Marioサブブロック+2分(ブロック分け大法が良い)


スーパーマリオ
Mario i s world-famous plumber.Hs“burly”figre and amamzininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininbrick s i n[L,R]Mario can hit if the maximal height he can jump is H.
Input
The first line follows an integer T,the number of test data.For each test data:The first line contains two integers n,m(1==n==10,1==m==10^5)n is theregth of the road,therine inbersネクストmライン、each line contains three integers L、R、H.(0<=L==R 0<=H==100000.)
Output
For each case,output「Case X:」(X is the case number starting from 1)followed by m lines,each line contains an integer.The ith integer is the number of briks Maric hit for the ith.
Sample Input
1
10 10
0 5 2 7 5 4 3 8 7 7 
2 8 6
3 5 0
1 3 1
1 9 4
0 1 0
3 5 5
5 5 1
4 6 3
1 5 7
5 7 3
Sample Output
Case 1:
4
0
0
3
1
2
0
1
5
1
タイトル:n個の数をあげて、数の中で重複しています.m個の問い合わせがありますが、「L,R」区間の数はh以下のどれぐらいですか?
分析:快速検索——並べ替え(快速)、二点
ブロックの大法を分けるのはいいですね.昨日は莫隊を分かりました.今日はブロックを叩いて、速くしました.
すぐに自分がオフラインの問題ができると思いました.
本の主席の木(持続可能な線分樹)は直接にブロック分けして解決します.
簡単で乱暴です
#include
using namespace std;
int n,m;
int init[100005];//   
int after[100005];//      
int block[100005];// i      
int temp;
int l,r;
int main()
{
    int t;
    scanf("%d",&t);
    for(int cas=1; cas<=t; cas++)
    {
        scanf("%d%d",&n,&m);
        for(int i=0; i