题意:求s有多少种情况....
题解:bitset,第一次认识这个东西
我们先看暴力怎么做,每次输入一个区间,然后对于每一个位置的元素,与上一次的到的所有元素相加,然后去重
比如输入[1,2],然后我们之前输入的区间一共可以得到[4,9,16];
那么可以新的得到[5,10,17,8,13,20],然后新得到的会出现重复,具体的可以根据样例试一试
然后如果一直输入的右区间都是100的话,输入100次最大可以得到100100100=1e6,然后区间长度100,100个区间.....1e10的时间复杂度,
然后现在用bitset,现在有[4,9,16]这三个数可以改写成二进制00000001000000100001000这种情况倒数第4,9,16位为1,然后每次比如说+4,相当于上面这个串后面加4个0,即000000010000001000010000000,然后如果此时输入的是[1,2],2的情况如左边,1的情况就是后面加1个0,即00000001000000100001000,然后对于[1,2]得到的串取或运算即000010010001001010010000,然后统计1的个数

bitset<4> bitset1;  //无参构造,长度为4,默认每一位为0

 bitset<8> bitset2(12);  //长度为8,二进制保存,前面用0补充

 string s = "100101";
 bitset<10> bitset3(s);  //长度为10,前面用0补充

 char s2[] = "10101";
 bitset<13> bitset4(s2);  //长度为13,前面用0补充

 cout << bitset1 << endl;  //0000
 cout << bitset2 << endl;  //00001100
 cout << bitset3 << endl;  //0000100101
 cout << bitset4 << endl;  //0000000010101
bitset<2> bitset1(12);  //12的二进制为1100(长度为4),但bitset1的size=2,只取后面部分,即00

 string s = "100101";  
 bitset<4> bitset2(s);  //s的size=6,而bitset的size=4,只取前面部分,即1001

 char s2[] = "11101";
 bitset<4> bitset3(s2);  //与bitset2同理,只取前面部分,即1110

 cout << bitset1 << endl;  //00
 cout << bitset2 << endl;  //1001
 cout << bitset3 << endl;  //1110
bitset<4> foo (string("1001"));
 bitset<4> bar (string("0011"));

 cout << (foo^=bar) << endl; // 1010 (foo对bar按位异或后赋值给foo)
 cout << (foo&=bar) << endl; // 0010 (按位与后赋值给foo)
 cout << (foo|=bar) << endl; // 0011 (按位或后赋值给foo)

 cout << (foo<<=2) << endl; // 1100 (左移2位,低位补0,有自身赋值)
 cout << (foo>>=1) << endl; // 0110 (右移1位,高位补0,有自身赋值)

 cout << (~bar) << endl;  // 1100 (按位取反)
 cout << (bar<<1) << endl;  // 0110 (左移,不赋值)
 cout << (bar>>1) << endl;  // 0001 (右移,不赋值)

 cout << (foo==bar) << endl; // false (0110==0011为false)
 cout << (foo!=bar) << endl; // true (0110!=0011为true)

 cout << (foo&bar) << endl; // 0010 (按位与,不赋值)
 cout << (foo|bar) << endl; // 0111 (按位或,不赋值)
 cout << (foo^bar) << endl; // 0101 (按位异或,不赋值)
#include<bits/stdc++.h>
using namespace std;
bitset<1000005>dp[105];
int main(){
    int n;
    cin>>n;
    dp[0][0]=1;
    for(int i=1;i<=n;i++){
        int l,r;
        cin>>l>>r;
        for(int j=l;j<=r;j++){
            dp[i]|=dp[i-1]<<j*j;
        }
    }
    cout<<dp[n].count()<<endl;
    return 0;
}