求玄学复杂度
查看原帖
求玄学复杂度
928568
zhouzihan20110620楼主2024/12/28 15:37
#include <iostream>
#include <map>
using namespace std;
long long n, m, x, y, x1, y1, x2, y2;
map <long long, map<long long, long long> > c;
long long lowbit(long long x)
{
	return x & -x;
}
void update(long long nowx, long long nowy, long long k)
{
	for (int nx = nowx;nx <= 2000000;nx += lowbit(nx))
	{
		for (int ny = nowy;ny <= 2000000;ny += lowbit(ny))
		{
			c[nx][ny] += k;
		}
	}
	return;
}
long long query(long long nowx, long long nowy)
{
	long long ans = 0;
	for (int nx = nowx;nx;nx -= lowbit(nx))
	{
		for (int ny = nowy;ny;ny -= lowbit(ny))
		{
			ans += c[nx][ny];
		}
	}
	return ans;
}
int main()
{
	cin >> n >> m;
	for (int i = 1;i <= n;i++)
	{
		cin >> y;
		x = i;
		update(x, y, 1);
	}
	for (int i = 1;i <= m;i++)
	{
		cin >> x1 >> x2 >> y1;
		y2 = y1;
		cout << query(x2, y2) - query(x1 - 1, y1) << "\n";
	}
	return 0;
}
2024/12/28 15:37
加载中...