답안 #41307

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
41307 2018-02-15T20:59:24 Z wzy Meteors (POI11_met) C++14
87 / 100
2595 ms 54484 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){
    	int 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);
    }
     
    int 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();
    				int 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 'int 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);
                                                                       ^
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 14460 KB Output is correct
2 Correct 14 ms 14600 KB Output is correct
3 Correct 14 ms 14620 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 14624 KB Output is correct
2 Correct 14 ms 14636 KB Output is correct
3 Correct 15 ms 14868 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 115 ms 16540 KB Output is correct
2 Correct 222 ms 18568 KB Output is correct
3 Correct 182 ms 18568 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 178 ms 18568 KB Output is correct
2 Correct 182 ms 18568 KB Output is correct
3 Correct 237 ms 18788 KB Output is correct
4 Correct 50 ms 18788 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 164 ms 18788 KB Output is correct
2 Correct 234 ms 19352 KB Output is correct
3 Correct 160 ms 19352 KB Output is correct
4 Correct 178 ms 19352 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 185 ms 19352 KB Output is correct
2 Correct 196 ms 19352 KB Output is correct
3 Correct 128 ms 19352 KB Output is correct
4 Correct 231 ms 19976 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1557 ms 34596 KB Output is correct
2 Correct 938 ms 34596 KB Output is correct
3 Correct 822 ms 34596 KB Output is correct
4 Correct 2595 ms 54484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1557 ms 54484 KB Output is correct
2 Correct 1028 ms 54484 KB Output is correct
3 Incorrect 673 ms 54484 KB Output isn't correct
4 Halted 0 ms 0 KB -