Submission #3391699


Source Code Expand

#include <iostream>
#include <unordered_map>
#include <vector>
#define llint long long
#define mod 1000000007
#define inf 1e18

using namespace std;
typedef unordered_map<llint, llint> UMP;


struct SegTree{
	int size;
	vector<UMP> seg;
	
	SegTree(){}
	SegTree(int size){
		this->size = size;
		seg.resize(1<<(size+1));
	}
	
	void set(int i, UMP ump)
	{
		seg[(1<<size)+i] = ump;
	}
	void build()
	{
		for(int i = (1<<size)-1; i >= 1; i--){
			UMP lval = seg[i*2], rval = seg[i*2+1];
			if(lval.size() < rval.size()) swap(lval, rval);
			for(auto it = rval.begin(); it != rval.end(); it++){
				lval[it->first] += it->second;
			}
			seg[i] = lval;
		}
	}

	UMP query(int a, int b, int k, int l, int r)
	{
		if(b < l || r < a) return UMP();
		if(a <= l && r <= b) return seg[k];
		UMP lval = query(a, b, k*2, l, (l+r)/2);
		UMP rval = query(a, b, k*2+1, (l+r)/2+1, r);
		if(lval.size() < rval.size()) swap(lval, rval);
		for(auto it = rval.begin(); it != rval.end(); it++){
			lval[it->first] += it->second;
		}
		return lval;
	}
	UMP query(int a, int b)
	{
		return query(a, b, 1, 0, (1<<size)-1);
	}
};


llint N, Q;
llint x[100005];
llint prime[100005];
UMP mp[100005];
SegTree seg(17);

int main(void)
{
	for(int i = 2; i < 1005; i++){
		if(prime[i]) continue;
		for(int j = 2*i; j < 100005; j+=i) prime[j] = i;
	}
	for(int i = 2; i < 100005; i++){
		llint x = i;
		while(prime[x]){
			mp[i][prime[x]]++;
			x /= prime[x];
		}
		if(x > 1) mp[i][x]++;
	}
	
	cin >> N >> Q;
	for(int i = 1; i <= N; i++) cin >> x[i];
	
	for(int i = 1; i <= N; i++) seg.set(i, mp[x[i]]);
	seg.build();
	
	llint l, r; UMP res;
	for(int q = 0; q < Q; q++){
		cin >> l >> r;
		res = seg.query(l, r);
		llint ans = 1;
		for(auto it = res.begin(); it != res.end(); it++){
			ans *= it->second + 1;
			ans %= mod;
		}
		cout << ans << endl;
	}
	
	return 0;
}

Submission Info

Submission Time
Task B - ニワンゴくんの約数
User leaf1415
Language C++14 (GCC 5.4.1)
Score 0
Code Size 1933 Byte
Status TLE
Exec Time 2662 ms
Memory 122008 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 1100
Status
AC × 2
AC × 14
TLE × 10
Set Name Test Cases
Sample s1.txt, s2.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, s1.txt, s2.txt
Case Name Status Exec Time Memory
01.txt TLE 2661 ms 116604 KB
02.txt TLE 2661 ms 116400 KB
03.txt TLE 2662 ms 111852 KB
04.txt TLE 2662 ms 112028 KB
05.txt TLE 2661 ms 108672 KB
06.txt TLE 2662 ms 108800 KB
07.txt TLE 2660 ms 88320 KB
08.txt TLE 2660 ms 88576 KB
09.txt TLE 2662 ms 121676 KB
10.txt TLE 2662 ms 122008 KB
11.txt AC 818 ms 57472 KB
12.txt AC 817 ms 57472 KB
13.txt AC 695 ms 47744 KB
14.txt AC 707 ms 49152 KB
15.txt AC 696 ms 47872 KB
16.txt AC 694 ms 47744 KB
17.txt AC 1308 ms 91776 KB
18.txt AC 1308 ms 91776 KB
19.txt AC 1272 ms 80768 KB
20.txt AC 1256 ms 80896 KB
21.txt AC 922 ms 56704 KB
22.txt AC 908 ms 56704 KB
s1.txt AC 62 ms 33792 KB
s2.txt AC 62 ms 33792 KB