五:
對於區間開方操作,維護區間最大值,若區間最小值小於等於1,那麼就不需要進行操作 用add【】陣列記錄
//第一行輸入乙個數字 n。
////第二行輸入 n 個數字,第 i 個數字為 ai,以空格隔開。
////接下來輸入 n 行詢問,每行輸入四個數字 opt l r c,以空格隔開。
////若 opt=0,表示將位於 [l,r] 的之間的數字都開方
////若 opt=1,表示詢問 [l,r] 的所有數字的和
#pragma gcc optimize("ofast")
#pragma comment(linker, "/stack:102400000,102400000")
#pragma gcc target(sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx)
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define pi acos(-1)
#define s_1(x) scanf("%d",&x)
#define s_2(x,y) scanf("%d%d",&x,&y)
#define s_3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define s_4(x,y,z,x) scanf("%d%d%d%d",&x,&y,&z,&x)
#define s_1(x) scan_d(x)
#define s_2(x,y) scan_d(x),scan_d(y)
#define s_3(x,y,z) scan_d(x),scan_d(y),scan_d(z)
#define pi acos(-1)
#define endl '\n'
#define srand() srand(time(0));
#define me(x,y) memset(x,y,sizeof(x));
#define foreach(it,a) for(__typeof((a).begin()) it=(a).begin();it!=(a).end();it++)
#define close() ios::sync_with_stdio(0); cin.tie(0);
#define for(x,n,i) for(int i=x;i<=n;i++)
#define for(x,n,i) for(int i=x;i=x;i--)
#define for(n,x,i) for(int i=n;i>x;i--)
#define w while
#define sgn(x) ((x) < 0 ? -1 : (x) > 0)
#define bug printf("***********\n");
#define db double
#define ll long long
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef pair ii;
const int inf=(1<<31);
const ll linf=0x3f3f3f3f3f3f3f3fll;
const int dx= ;
const int dy= ;
const int maxn=1e6+10;
const int maxx=1e3+10;
const double eps=1e-8;
const double eps=1e-8;
const int mod=1e9+7;
templateinline t min(t a,t b,t c)
templateinline t max(t a,t b,t c)
templateinline t min(t a,t b,t c,t d)
templateinline t max(t a,t b,t c,t d)
template inline bool scan_d(t &ret)
while (c != '-' && (c < '0' || c > '9'))
sgn = (c == '-') ? -1 : 1;
ret = (c == '-') ? 0 : (c - '0');
while (c = getchar(), c >= '0' && c <= '9')
ret *= sgn;
return 1;
}inline bool scan_lf(double &num) else if(in=='.') else num=in-'0';
if(!isd)
} if(in!='.') else
} if(isn) num=-num;
return true;
}void out(ll a)
if(a >= 10) out(a / 10);
putchar(a % 10 + '0');
}void print(ll a)
//freopen( "in.txt" , "r" , stdin );
//freopen( "data.txt" , "w" , stdout );
//cerr << "run time is " << clock() << endl;
int n,block,l[maxn],r[maxn],num,belong[maxn];
ll a[maxn],add[maxn],sum[maxn];
//vectorseg[1005];
bool check(int i)
void build()
for(int i=1; i<=num; i++)
for(int j=l[i]; j<=r[i]; j++)
for(int i=1; i<=belong[n]; i++)
if(check(i)) add[i]=1;
}ll query(int x,int y)
for(int i=belong[x]+1; ireturn ans;
}void update(int x,int y)
for(int i=belong[x]+1; i}void solve()
build();
for(1,n,i) else }}
int main()
}
6281 數列分塊入門 5
題目鏈結 用check來判斷整個塊是0是1,如果是0或者是1,就不用再對這個塊裡的元素開方了。對乙個數不斷開方一定會縮小到0或者1。第一行輸入乙個數字 n。第二行輸入 n 個數字,第 i 個數字為 ai,以空格隔開。接下來輸入 n 行詢問,每行輸入四個數字 opt l r c,以空格隔開。若 opt...
數列分塊入門 5 總結
這題我得著重給一給資料範圍,嗯嗯 哈哈,我們發現a i 最大是231 1。好,我們開開方先 2147483647 46340 取整的 2151431 1 我們再試幾個數,發現最終會變成0或1,然後就不會在變了。所以,它最多會開方5次,然後便相當於不變了。這樣子,我們一開始全部暴力改。每當乙個塊的全部...
分塊系列 數列分塊入門7 解題報告
區間乘法,區間加法,單點詢問。寫過線段樹模板2的童鞋應該很清楚了吧qaq 由於 與markdown衝突,所以用 代替o o 我們把乙個數表示為 a i tg2 b i tg1 b i tg2表示乘法標記,tg1表示加法標記。對於不完整的塊,直接 a i a i tg2 b i tg1 b i 將這個...