萌新求助
查看原帖
萌新求助
209604
pikabi楼主2020/10/2 22:12

用过自然溢出和取模都不对,挂在同两个点上。平方和前缀是预处理出来的。应该不是被卡,因为死因都是

read y, expected d

也不知道为什么正确的会被判成错误(

#include <cstdio>
#include <cctype>
#include <algorithm>
#include <cmath>
#define ll long long
#define mod 998244353
#define inf 0x3f3f3f3f

using namespace std;

inline int read(){
	int x=0,w=0;char ch=getchar();
	while (!isdigit(ch))w|=ch=='-',ch=getchar();
	while (isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
	return w?-x:x;
}

struct node{
	int val, maxn, minn;
}a[8000005];

int n, m, sum[25000005], minn, maxn, tot;

inline int ls(int p){
	return p << 1;
}

inline int rs(int p){
	return p << 1 | 1;
}

inline void update(int p){
	a[p].maxn = max(a[ls(p)].maxn , a[rs(p)].maxn );
	a[p].minn = min(a[ls(p)].minn , a[rs(p)].maxn );
	a[p].val = (a[ls(p)].val + a[rs(p)].val) % mod ;
}

inline void build(int p, int l, int r){
	if(l == r){
		a[p].maxn = a[p].minn = read();
		a[p].val = (1ll * a[p].maxn * a[p].maxn) % mod;
		return ;
	}
	int mid = l + r >> 1;
	build(ls(p), l, mid);
	build(rs(p), mid + 1, r);
	update(p);
}

inline void modify(int p, int l, int r, int k, int val){
	if(l == r){
		a[p].maxn = a[p].minn = val;
		a[p].val = (1ll * val * val) % mod;
		return ;
	}
	int mid = l + r >> 1;
	if(k <= mid) modify(ls(p), l, mid, k, val);
	else modify(rs(p), mid + 1, r, k, val);
	update(p);
}

inline void query(int p, int l, int r, int L, int R){
	if(L <= l && r <= R){
		maxn = max(maxn, a[p].maxn );
		minn = min(minn, a[p].minn );
		tot = (tot + a[p].val) % mod ;
		return ;
	}
	int mid = l + r >> 1;
	if(L <= mid) query(ls(p), l, mid, L, R);
	if(mid < R) query(rs(p), mid + 1, r, L, R);
}

int main(){
//	freopen("ans.out","w",stdout);
	n = read(), m = read();
	for(int i = 1; i <= 25000000; i++){
		sum[i] = (sum[i - 1] + (1ll * i * i) % mod) % mod;
	}
	build(1, 1, n);
	for(int i = 1; i <= m; i++){
		int opt = read(), x = read(), y = read();
		if(opt == 1){
			modify(1, 1, n, x, y);
		}
		else {
			maxn = -inf, minn = inf;
			tot = 0;
			query(1, 1, n, x, y);
			if(maxn - minn != y - x){
				puts("yuanxing");
			}
			else {
				if((sum[maxn] - sum[minn - 1] + mod) % mod == tot % mod){
					puts("damushen");
				}
				else puts("yuanxing");
			}
		}
	}
}
2020/10/2 22:12
加载中...