제출 #1347866

#제출 시각아이디문제언어결과실행 시간메모리
1347866MuhammadSaramFire (JOI20_ho_t5)C++20
6 / 100
66 ms17656 KiB
#include <bits/stdc++.h>

using namespace std;

#define endl '\n'
#define ll long long

const int M = 2e5 + 1;

int seg[M*2], fen[M];

void modify(int p,int x)
{
	while (p<M)
		fen[p]+=x, p+=p&-p;
}

int get(int p)
{
	int ans=0;
	while (p)
		ans+=fen[p], p^=p&-p;
	return ans;
}

void solve()
{
	int n,m;
	cin>>n>>m;
	vector<int> v[n+2];
	vector<array<int,3>> q[n+1];
	int ls=-1;
	for (int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		if (x==2) ls=i;
		if (~ls) v[i-ls].push_back(i+1);
	}
	for (int i=0;i<m;i++)
	{
		int t,l,r;
		cin>>t>>l>>r;
		q[t].push_back({l,r,i});
	}
	int ans[m];
	for (int i=0;i<=n;i++)
	{
		for (int x:v[i]) modify(x,1);
		for (auto e:q[i])
			ans[e[2]]=get(e[1])-get(e[0]-1)+e[1]-e[0]+1;
	}
	for (int i=0;i<m;i++)
		cout<<ans[i]<<endl;
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL), cout.tie(NULL);

	int t=1;
	// cin>>t;
	while (t--)
		solve();

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...