Submission #41313

# Submission time Handle Problem Language Result Execution time Memory
41313 2018-02-15T21:28:58 Z wzy Meteors (POI11_met) C++
100 / 100
2867 ms 58588 KB
    #include <bits/stdc++.h>
    using namespace std;
    #define F first
    #define S second
    #define pii pair<int,int>
    #define pb push_back
    int n ,m , k , ans[300005] , qt[300005] , l[300005] , r[300005] ;
    long long bit[300005] ;
    vector<int> own[300005];
    vector<int> sweep[300005];
    pair<pii , int> querys[300005];
     
    void upd(int x , int v){
    	for(int i = x ; i < 300005; i += (i&-i)){
    		bit[i] += v;
    	}
    	return;
    }
     
    long long gt(int x){
    	long long  s = 0;
    	for(int i = x ; i > 0 ; i -=(i&-i)){
    		s+= bit[i];
    	}
    	return s;
    }
     
     
     
    void update(int l , int r , int v){
    	if(l <= r){
    		upd(l , v);
    		upd(r + 1 , -v);
    	}
    	else{
    		upd(l , v);
    		upd(1 , v);
    		upd(r + 1 , -v);
    	}
    	return;
    }
     
    long long query(int x){
    	return gt(x);
    }
     
    int32_t main(){
    	scanf("%d%d" , &n , &m);
    	for(int i = 1 ; i <= m;i++){
    		int x;
    		scanf("%d" , &x);
    		own[x].pb(i);
    	}
    	for(int i = 1 ; i  <= n;i++) scanf("%d" , &qt[i]);
    	scanf("%d" , &k);
    	for(int i = 1 ; i <= k ; i++){
    		scanf("%d%d%d" , &querys[i].F.F , &querys[i].F.S , &querys[i].S);
    	}
    	for(int i = 1 ; i <= n;i++) l[i] = 1 , r[i] = k , ans[i] = -1;
    	while(true){
    		bool cabou = true;
    		for(int i = 1 ; i <= n; i++){
    			if(l[i] <= r[i]){
    				sweep[(l[i] + r[i])/2].pb(i);
    				cabou = false;
    			}
    		}
    		if(cabou) break;
    		for(int i = 1 ; i <= m + 1 ; i++) bit[i] = 0;
    		for(int i = 1 ; i <= k ; i++){
    			update(querys[i].F.F , querys[i].F.S , querys[i].S);
    			while(sweep[i].size()){
    				int u = sweep[i].back();
    				sweep[i].pop_back();
    				long long sj = 0;
    				bool deu = false;
    				for(int w = 0 ;  w < own[u].size() ; w++){
    					int v = own[u][w];
    					sj += query(v);
    					if(sj >= qt[u]){
    						deu = true;
    						break;
    					}
    				}
    				if(deu){
    					if(l[u] == r[u]) ans[u] = i , r[u] = -1;
    					else r[u] = i;
    				}
    				else{
    					if(l[u] == r[u]) r[u] = -1;
    					else l[u] = i + 1;
    				}
    			}
    		}
    	}
    	for(int i = 1 ; i <= n; i++){
    		if(ans[i] == -1) puts("NIE");
    		else printf("%d\n" , ans[i] );
    	}
     
    }

Compilation message

met.cpp: In function 'int32_t main()':
met.cpp:77:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int w = 0 ;  w < own[u].size() ; w++){
                            ^
met.cpp:48:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
      scanf("%d%d" , &n , &m);
                             ^
met.cpp:51:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d" , &x);
                       ^
met.cpp:54:55: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
      for(int i = 1 ; i  <= n;i++) scanf("%d" , &qt[i]);
                                                       ^
met.cpp:55:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
      scanf("%d" , &k);
                      ^
met.cpp:57:71: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d%d%d" , &querys[i].F.F , &querys[i].F.S , &querys[i].S);
                                                                       ^
# Verdict Execution time Memory Grader output
1 Correct 17 ms 18040 KB Output is correct
2 Correct 20 ms 18040 KB Output is correct
3 Correct 19 ms 18196 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 18252 KB Output is correct
2 Correct 18 ms 18252 KB Output is correct
3 Correct 19 ms 18324 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 124 ms 19420 KB Output is correct
2 Correct 216 ms 21468 KB Output is correct
3 Correct 178 ms 21468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 180 ms 21468 KB Output is correct
2 Correct 191 ms 21468 KB Output is correct
3 Correct 240 ms 21696 KB Output is correct
4 Correct 52 ms 21696 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 169 ms 21696 KB Output is correct
2 Correct 253 ms 22200 KB Output is correct
3 Correct 168 ms 22200 KB Output is correct
4 Correct 204 ms 22200 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 186 ms 22200 KB Output is correct
2 Correct 195 ms 22200 KB Output is correct
3 Correct 130 ms 22200 KB Output is correct
4 Correct 228 ms 23160 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1574 ms 34524 KB Output is correct
2 Correct 935 ms 34524 KB Output is correct
3 Correct 842 ms 34524 KB Output is correct
4 Correct 2537 ms 54616 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1547 ms 54616 KB Output is correct
2 Correct 982 ms 54616 KB Output is correct
3 Correct 678 ms 54616 KB Output is correct
4 Correct 2867 ms 58588 KB Output is correct