测试的时候大数据能过,小数据反而过不了,就离谱......
这是代码:
#include<bits/stdc++.h>
using namespace std;
unsigned long long N,M,V,a[2000010],add[2000010],b[2000010],x,k,ans1,ans2;
int find_j(int x){
if(a[x] == b[x-1]){
if(a[x] > a[add[x-1]])return x;
else return add[x-1];
}
if(a[x] > b[x-1])return x;
else return add[x-1];
}
int main(){
ios::sync_with_stdio(false);
cin>>N>>M>>V;
for(int i = 1;i <= N;++i){
cin >> a[i];
}
for(int i = 1;i <= N;++i){
b[i] = max(b[i-1],a[i])+V;
add[i] = find_j(i);
}
while(M--){
cin >> x >> k;
if(x+k > N){
continue;
}
unsigned long long ans;
if(add[x+k-1] > x)ans = b[x+k-1]+1-V*k,ans;
else ans = b[x-1];
ans1 = ans1^ans;
ans2 = ans2+ans;
}
cout << ans1 <<" "<< ans2;
return 0;
}
find_j()是用来找原序列下第i次操作选中的j的