见鬼了(蜜汁BUG
  • 板块学术版
  • 楼主Saka_Noa
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/1/23 22:53
  • 上次更新2023/10/24 03:14:12
查看原帖
见鬼了(蜜汁BUG
498612
Saka_Noa楼主2023/1/23 22:53
  #include<bits/stdc++.h>
  using namespace std;
  int pos[1][200005];
  long long sum[1][200005];
  int a[200005];
  int n;
  int q;
  long long ans;
  int main() {
	cin >> n;
	for(int i = 1;i <= n;i++) 
	  	cin >> a[i];
	int j = 1;
	for(int i = 1;i <= n;i++) 
	{
	  	pos[0][i] = pos[0][i - 1];
	  	while(j <= n && pos[0][i] - i + 1 <= a[j]) 
			pos[0][i] = ++j;
		sum[0][i] = sum[0][i - 1] + pos[0][i];
		ans += pos[0][i] - i;
	}
	j = 1;
	for(int i = 1;i <= n;i++) 
	{
		cout << i << " "<< a[1] << " " << a[2] << " " << a[3] << " " << a[4] << " " << a[5] << endl;
		j = min(n + 1, pos[0][i] + 1);
		pos[1][i] = j;
		while(j <= n && pos[1][i] - i + 1 <= a[j]) 
			pos[1][i] = ++j;
		sum[1][i] = sum[1][i - 1] + pos[1][i];
	}
	
  	cin >> q;
  	while(q--) {
  		int p, x;
  		cin >> p >> x;
  		//cout << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << endl;
  		cout << "[" << p << " " << a[p] << "]\n";
  		if(x < a[p]) 
		  {
  			int l = 1, r = n, mid, p1 = n, p2 = n;
  			while(l <= r) 
			  {
  				  mid = (l + r) >> 1;
				  if(pos[0][mid] > p) p1 = mid, r = mid - 1;
				  else l = mid + 1; 	
			  }
			p2 = p - x;
			if(p1 > p2) 
				{
					cout << "qwq1\n";
				  	cout << ans << endl;
				  	continue;
				}
			long long tmp = sum[0][p2] - sum[0][p1 - 1];
			cout << ans - tmp + p * (p2 - p1 + 1) << endl;
			cout << "qwq2\n";
		  } 
		else if(x > a[p]) 
			{
				int l = 1, r = n, mid, p1 = n, p2 = 0;
				while(l <= r) 
				  {
	  				  mid = (l + r) >> 1;
					  if(pos[0][mid] <= p) p2 = mid, l = mid + 1;
					  else r = mid - 1; 	
				  }
				l = 1, r = p2;
				while(l <= r) 
					{
						mid = (l + r) >> 1;
						if(pos[0][mid] == p) p1 = mid, r = mid - 1;
						else l = mid + 1;
					}
				p1 = max(p1, 1 - (x - p));
				if(p1 > p2) 
					{
						cout << ans << endl;
						cout << "qwq3\n";
						continue;
					}
				long long tmp = sum[1][p2] - sum[1][p1 - 1];
				cout << ans - p * (p2 - p1 + 1) + tmp << endl;
				cout << "qwq4\n";
			}
			else 
				cout << ans << endl;
				
	  }
	  
  	
  	return 0;   
  } 

输入

4
2 4 1 4
3
2 4
3 3
2 1

结果

5
1 1 3 2 1
1 1 1 3 2 1
2 1 1 3 2 1
3 1 1 3 2 1
4 0 1 3 2 1
5 0 21 0 2 1
3
1 3
[1 0]
7
qwq3
2 5
[2 21]
qwq1
7
4 5
[4 27]
qwq1
7

我想知道为什么aa数组值会变啊

2023/1/23 22:53
加载中...