Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int inf = 1e9;
- const int N = 3e2 + 10;
- const int M = 5e3 + 10;
- const int logM = ceil(log2(M));
- int table[N][1 << (logM + 1)], lazy[N][1 << (logM + 1)];
- int n, m;
- void Lazy(int idx, int row, int l, int r){
- if(lazy[row][idx] == 0) return;
- if(l != r){
- lazy[row][2 * idx] = lazy[row][idx];
- lazy[row][2 * idx + 1] = lazy[row][idx];
- }
- table[row][idx] = lazy[row][idx];
- lazy[row][idx] = 0;
- }
- void Update(int idx, int l, int r, int row, int s, int e, int val){
- Lazy(idx, row, l, r);
- if(l > e or r < s) return;
- if(s <= l and r <= e){
- if(l != r){
- lazy[row][2 * idx] = val;
- lazy[row][2 * idx + 1] = val;
- }
- table[row][idx] = val;
- return;
- }
- int mid = (l + r) / 2;
- Update(2 * idx, l, mid, row, s, e, val);
- Update(2 * idx + 1, mid + 1, r, row, s, e, val);
- if(l != r) table[row][idx] = min(table[row][2 * idx], table[row][2 * idx + 1]);
- }
- int Query(int idx, int l, int r, int row, int s, int e){
- Lazy(idx, row, l, r);
- if(l > e or r < s) return inf;
- if(s <= l and r <= e) return table[row][idx];
- int mid = (l + r) / 2;
- return min( Query(2 * idx, l, mid, row, s, e),
- Query(2 * idx + 1, mid + 1, r, row, s, e));
- }
- int main(){
- int Q;
- scanf("%d %d %d", &n, &m, &Q);
- for(int q=1;q<=Q;q++){
- int k; scanf("%d", &k);
- if(k == 1){
- int r, c, x; scanf("%d %d %d", &r, &c, &x);
- Update(1, 1, m, r, c, c, x);
- }
- else if(k == 2){
- int r, x; scanf("%d %d", &r, &x);
- Update(1, 1, m, r, 1, m, x);
- }
- else if(k == 3){
- int r, c; scanf("%d %d", &r, &c);
- printf("%d\n", Query(1, 1, m, r, c, c));
- }
- else if(k == 4){
- int mn = inf;
- for(int i=1;i<=n;i++){
- mn = min(mn, Query(1, 1, m, i, 1, m));
- }
- printf("%d\n", mn);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement