整上了__int128的6pts代码,没看出来哪错了
查看原帖
整上了__int128的6pts代码,没看出来哪错了
1268524
DX3906_ourstar楼主2024/10/5 10:34

rt,看数据似乎要爆int,果断换上__int128

#include<iostream>
#define re register
#define int __int128
using namespace std;

const int N = 1e7 + 5;

int n,opt,mod,minn,maxx,final;
int d[N],ans[N];

inline int read(){
	re char c = getchar();
	int x = 0;
	while(c < '0' || c > '9'){
		c = getchar();
	}
	while(c >= '0' && c <= '9'){
		x = x * 10 + c - '0';
		c = getchar();
	}
	return x;
}

inline void write(int n){
	if(n < 0){
		putchar('-');
		n *= -1;
	}
	if(n >= 10){
		write(n / 10);
	}
	putchar(n % 10 + '0');
}

inline int find(int l,int r){
	int cnt = 0,tmp = 0;
	for(re int i = 1;i <= r;i ++){
		tmp += d[i];
		int mid = tmp * i % mod;
		if(i >= l && minn <= mid && mid <= maxx){
			cnt ++;
		}
	}
	return cnt;
}

signed main(){
	n = read();
	opt = read();
	mod = read();
	minn = read();
	maxx = read();
	for(re int i = 1;i <= opt;i ++){
		char c = getchar();
		while(c != 'A' && c != 'Q'){
			c = getchar();
		}
		if(c == 'A'){
			int l = read(),r = read(),x = read();
			d[l] += x;
			d[r + 1] -= x;
		}else if(c == 'Q'){
			int l = read(),r = read();
			write(find(l,r));
			putchar('\n');
		}
	}
	final = read();
	int tmp = 0;
	for(re int i = 1;i <= n;i ++){
		tmp += d[i];
		int mid = tmp * i % mod;
		ans[i] = ((minn <= mid) && (mid <= maxx)) ? 1 : 0;
		ans[i] += ans[i - 1]; 
	}
	for(re int i = 1;i <= final;i ++){
		int l = read(),r = read();
		write(ans[r] - ans[l - 1]);
		putchar('\n');
	}
	return 0;
}
2024/10/5 10:34
加载中...