链接-----》bitset应用
/*
自己选择的路 ,跪着也要走完。朋友们 , 虽然这个世界日益浮躁起来,只
要能够为了当时纯粹的梦想和感动坚持努力下去 , 不管其它人怎么样,我
们也能够保持自己的本色走下去。
To the world , you will be a person , but to a person , you
will be the world . ——AKPower
*/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#include <bitset>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef long long ll;
// 本题S最大是1e6
// 所以设置1e6个“位置”来标记每个数而不是二进制表示//这是理解的关键
bitset<1000005> ans, pre;
int main()
{
IOS;
pre = 1;
ll n, a, b;
cin >> n;
for (ll i = 1; i <= n; i++)
{
cin >> a >> b;
ans = 0;
for (ll j = a; j <= b; j++)
{
// 前面所有前缀和都加上了j*j,因为每个bitset记录了若干个前缀和
ans |= (pre << (j * j));
}
pre = ans;
}
// 统计1的个数就是能取到的状态
cout << ans.count() << endl;
getchar();
getchar();
return 0;
}