题面 本题其实主要就这几点: 1.离线,以右端点排序(从小到大); 2.建立树状数组c[],c[i]表示从1~i中有多少种不同的数字: 3.对于每次查询的答案就是sum(r)-sum(l-1); 4.由于问题是离线排序回答,所以应该注意输出顺序(离散化前的顺序): Q:直接统计前缀和,然后对于每次询问O(1)输出不行吗? A:当然不行,因为仅仅确保了sum[r]的正确性,无法确保sum[l-1]的正确性:比如说:1 2 3 1 1 1 ,区间[2,5]的个数是3,然而sum[5]=3,sum[1…